mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	performance improvement - getCurrentContext
inlined getCurrentContext and getMutableContext Further work on #1086. Brings test from 0m37.913 to 0m25.584s Catch2 is now faster than Catch 1.x!!
This commit is contained in:
		| @@ -45,21 +45,16 @@ namespace Catch { | ||||
|         IResultCapture* m_resultCapture = nullptr; | ||||
|     }; | ||||
|  | ||||
|     namespace { | ||||
|         Context* currentContext = nullptr; | ||||
|     } | ||||
|     IMutableContext& getCurrentMutableContext() { | ||||
|         if( !currentContext ) | ||||
|             currentContext = new Context(); | ||||
|         return *currentContext; | ||||
|     } | ||||
|     IContext& getCurrentContext() { | ||||
|         return getCurrentMutableContext(); | ||||
|     IMutableContext *IMutableContext::currentContext = nullptr; | ||||
|  | ||||
|     void IMutableContext::createContext() | ||||
|     { | ||||
|         currentContext = new Context(); | ||||
|     } | ||||
|  | ||||
|     void cleanUpContext() { | ||||
|         delete currentContext; | ||||
|         currentContext = nullptr; | ||||
|         delete IMutableContext::currentContext; | ||||
|         IMutableContext::currentContext = nullptr; | ||||
|     } | ||||
|     IContext::~IContext() = default; | ||||
|     IMutableContext::~IMutableContext() = default; | ||||
|   | ||||
| @@ -15,6 +15,7 @@ namespace Catch { | ||||
|     struct IResultCapture; | ||||
|     struct IRunner; | ||||
|     struct IConfig; | ||||
|     struct IMutableContext; | ||||
|  | ||||
|     using IConfigPtr = std::shared_ptr<IConfig const>; | ||||
|  | ||||
| @@ -33,10 +34,26 @@ namespace Catch { | ||||
|         virtual void setResultCapture( IResultCapture* resultCapture ) = 0; | ||||
|         virtual void setRunner( IRunner* runner ) = 0; | ||||
|         virtual void setConfig( IConfigPtr const& config ) = 0; | ||||
|  | ||||
|     private: | ||||
|         static IMutableContext *currentContext; | ||||
|         friend IMutableContext& getCurrentMutableContext(); | ||||
|         friend void cleanUpContext(); | ||||
|         static void createContext(); | ||||
|     }; | ||||
|  | ||||
|     IContext& getCurrentContext(); | ||||
|     IMutableContext& getCurrentMutableContext(); | ||||
|     inline IMutableContext& getCurrentMutableContext() | ||||
|     { | ||||
|         if( !IMutableContext::currentContext ) | ||||
|             IMutableContext::createContext(); | ||||
|         return *IMutableContext::currentContext; | ||||
|     } | ||||
|  | ||||
|     inline IContext& getCurrentContext() | ||||
|     { | ||||
|         return getCurrentMutableContext(); | ||||
|     } | ||||
|  | ||||
|     void cleanUpContext(); | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Neal Coombes
					Neal Coombes