mirror of
https://github.com/catchorg/Catch2.git
synced 2024-12-23 03:43:28 +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:
parent
fe725648a7
commit
f18366150e
@ -45,21 +45,16 @@ namespace Catch {
|
|||||||
IResultCapture* m_resultCapture = nullptr;
|
IResultCapture* m_resultCapture = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace {
|
IMutableContext *IMutableContext::currentContext = nullptr;
|
||||||
Context* currentContext = nullptr;
|
|
||||||
}
|
void IMutableContext::createContext()
|
||||||
IMutableContext& getCurrentMutableContext() {
|
{
|
||||||
if( !currentContext )
|
|
||||||
currentContext = new Context();
|
currentContext = new Context();
|
||||||
return *currentContext;
|
|
||||||
}
|
|
||||||
IContext& getCurrentContext() {
|
|
||||||
return getCurrentMutableContext();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void cleanUpContext() {
|
void cleanUpContext() {
|
||||||
delete currentContext;
|
delete IMutableContext::currentContext;
|
||||||
currentContext = nullptr;
|
IMutableContext::currentContext = nullptr;
|
||||||
}
|
}
|
||||||
IContext::~IContext() = default;
|
IContext::~IContext() = default;
|
||||||
IMutableContext::~IMutableContext() = default;
|
IMutableContext::~IMutableContext() = default;
|
||||||
|
@ -15,6 +15,7 @@ namespace Catch {
|
|||||||
struct IResultCapture;
|
struct IResultCapture;
|
||||||
struct IRunner;
|
struct IRunner;
|
||||||
struct IConfig;
|
struct IConfig;
|
||||||
|
struct IMutableContext;
|
||||||
|
|
||||||
using IConfigPtr = std::shared_ptr<IConfig const>;
|
using IConfigPtr = std::shared_ptr<IConfig const>;
|
||||||
|
|
||||||
@ -33,10 +34,26 @@ namespace Catch {
|
|||||||
virtual void setResultCapture( IResultCapture* resultCapture ) = 0;
|
virtual void setResultCapture( IResultCapture* resultCapture ) = 0;
|
||||||
virtual void setRunner( IRunner* runner ) = 0;
|
virtual void setRunner( IRunner* runner ) = 0;
|
||||||
virtual void setConfig( IConfigPtr const& config ) = 0;
|
virtual void setConfig( IConfigPtr const& config ) = 0;
|
||||||
|
|
||||||
|
private:
|
||||||
|
static IMutableContext *currentContext;
|
||||||
|
friend IMutableContext& getCurrentMutableContext();
|
||||||
|
friend void cleanUpContext();
|
||||||
|
static void createContext();
|
||||||
};
|
};
|
||||||
|
|
||||||
IContext& getCurrentContext();
|
inline IMutableContext& getCurrentMutableContext()
|
||||||
IMutableContext& getCurrentMutableContext();
|
{
|
||||||
|
if( !IMutableContext::currentContext )
|
||||||
|
IMutableContext::createContext();
|
||||||
|
return *IMutableContext::currentContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline IContext& getCurrentContext()
|
||||||
|
{
|
||||||
|
return getCurrentMutableContext();
|
||||||
|
}
|
||||||
|
|
||||||
void cleanUpContext();
|
void cleanUpContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user