| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 | /* *  Created by Phil on 31/12/2010. *  Copyright 2010 Two Blue Cubes Ltd. All rights reserved. * *  Distributed under the Boost Software License, Version 1.0. (See accompanying *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */#ifndef TWOBLUECUBES_CATCH_CONTEXT_H_INCLUDED#define TWOBLUECUBES_CATCH_CONTEXT_H_INCLUDED#include <memory>namespace Catch {    struct IResultCapture;    struct IRunner;    struct IConfig;    struct IMutableContext;    using IConfigPtr = std::shared_ptr<IConfig const>;    struct IContext    {        virtual ~IContext();        virtual IResultCapture* getResultCapture() = 0;        virtual IRunner* getRunner() = 0;        virtual IConfigPtr const& getConfig() const = 0;    };    struct IMutableContext : IContext    {        virtual ~IMutableContext();        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();    };    inline IMutableContext& getCurrentMutableContext()    {        if( !IMutableContext::currentContext )            IMutableContext::createContext();        // NOLINTNEXTLINE(clang-analyzer-core.uninitialized.UndefReturn)        return *IMutableContext::currentContext;    }    inline IContext& getCurrentContext()    {        return getCurrentMutableContext();    }    void cleanUpContext();    class SimplePcg32;    SimplePcg32& rng();}#endif // TWOBLUECUBES_CATCH_CONTEXT_H_INCLUDED
 |