Merge pull request #1107 from coombez/contrib

performance improvements
This commit is contained in:
Phil Nash 2017-11-17 23:32:04 +00:00 committed by GitHub
commit 505d2f8977
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 34 additions and 19 deletions

View File

@ -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;

View File

@ -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();
}

View File

@ -17,10 +17,6 @@
namespace Catch {
auto StringRef::operator = ( StringRef other ) noexcept -> StringRef& {
swap( other );
return *this;
}
StringRef::operator std::string() const {
return std::string( m_start, m_size );
}

View File

@ -77,7 +77,14 @@ namespace Catch {
delete[] m_data;
}
auto operator = ( StringRef other ) noexcept -> StringRef&;
auto operator = ( StringRef const &other ) noexcept -> StringRef& {
delete[] m_data;
m_data = nullptr;
m_start = other.m_start;
m_size = other.m_size;
return *this;
}
operator std::string() const;
void swap( StringRef& other ) noexcept;