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