1 /* 2 * Created by Phil on 31/12/2010. 3 * Copyright 2010 Two Blue Cubes Ltd. All rights reserved. 4 * 5 * Distributed under the Boost Software License, Version 1.0. (See accompanying 6 * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 */ 8 #include "catch_context.h" 9 #include "catch_common.h" 10 #include "catch_random_number_generator.h" 11 12 namespace Catch { 13 14 class Context : public IMutableContext, NonCopyable { 15 16 public: // IContext getResultCapture()17 IResultCapture* getResultCapture() override { 18 return m_resultCapture; 19 } getRunner()20 IRunner* getRunner() override { 21 return m_runner; 22 } 23 getConfig() const24 IConfigPtr const& getConfig() const override { 25 return m_config; 26 } 27 28 ~Context() override; 29 30 public: // IMutableContext setResultCapture(IResultCapture * resultCapture)31 void setResultCapture( IResultCapture* resultCapture ) override { 32 m_resultCapture = resultCapture; 33 } setRunner(IRunner * runner)34 void setRunner( IRunner* runner ) override { 35 m_runner = runner; 36 } setConfig(IConfigPtr const & config)37 void setConfig( IConfigPtr const& config ) override { 38 m_config = config; 39 } 40 41 friend IMutableContext& getCurrentMutableContext(); 42 43 private: 44 IConfigPtr m_config; 45 IRunner* m_runner = nullptr; 46 IResultCapture* m_resultCapture = nullptr; 47 }; 48 49 IMutableContext *IMutableContext::currentContext = nullptr; 50 createContext()51 void IMutableContext::createContext() 52 { 53 currentContext = new Context(); 54 } 55 cleanUpContext()56 void cleanUpContext() { 57 delete IMutableContext::currentContext; 58 IMutableContext::currentContext = nullptr; 59 } 60 IContext::~IContext() = default; 61 IMutableContext::~IMutableContext() = default; 62 Context::~Context() = default; 63 64 rng()65 SimplePcg32& rng() { 66 static SimplePcg32 s_rng; 67 return s_rng; 68 } 69 70 } 71