| 
									
										
										
										
											2012-05-10 07:58:48 +01:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  *  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
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-25 21:51:44 +01:00
										 |  |  | #include <memory>
 | 
					
						
							| 
									
										
										
										
											2012-05-10 07:58:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-15 23:58:23 +01:00
										 |  |  | namespace Catch { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-10 07:58:48 +01:00
										 |  |  |     struct IResultCapture; | 
					
						
							|  |  |  |     struct IRunner; | 
					
						
							| 
									
										
										
										
											2012-08-28 08:20:18 +01:00
										 |  |  |     struct IConfig; | 
					
						
							| 
									
										
										
										
											2017-11-17 14:55:30 -06:00
										 |  |  |     struct IMutableContext; | 
					
						
							| 
									
										
										
										
											2012-05-10 07:58:48 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-25 20:18:02 +01:00
										 |  |  |     using IConfigPtr = std::shared_ptr<IConfig const>; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-21 18:52:09 +01:00
										 |  |  |     struct IContext | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2017-09-07 16:51:33 +02:00
										 |  |  |         virtual ~IContext(); | 
					
						
							| 
									
										
										
										
											2013-07-03 19:14:59 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-05-20 18:49:28 +01:00
										 |  |  |         virtual IResultCapture* getResultCapture() = 0; | 
					
						
							|  |  |  |         virtual IRunner* getRunner() = 0; | 
					
						
							| 
									
										
										
										
											2017-12-09 20:17:47 +01:00
										 |  |  |         virtual IConfigPtr const& getConfig() const = 0; | 
					
						
							| 
									
										
										
										
											2012-05-21 18:52:09 +01:00
										 |  |  |     }; | 
					
						
							| 
									
										
										
										
											2013-05-28 18:39:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-05-21 18:52:09 +01:00
										 |  |  |     struct IMutableContext : IContext | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2017-09-07 16:51:33 +02:00
										 |  |  |         virtual ~IMutableContext(); | 
					
						
							| 
									
										
										
										
											2012-05-21 18:52:09 +01:00
										 |  |  |         virtual void setResultCapture( IResultCapture* resultCapture ) = 0; | 
					
						
							|  |  |  |         virtual void setRunner( IRunner* runner ) = 0; | 
					
						
							| 
									
										
										
										
											2017-04-25 20:18:02 +01:00
										 |  |  |         virtual void setConfig( IConfigPtr const& config ) = 0; | 
					
						
							| 
									
										
										
										
											2017-11-17 14:55:30 -06:00
										 |  |  | 
 | 
					
						
							|  |  |  |     private: | 
					
						
							|  |  |  |         static IMutableContext *currentContext; | 
					
						
							|  |  |  |         friend IMutableContext& getCurrentMutableContext(); | 
					
						
							|  |  |  |         friend void cleanUpContext(); | 
					
						
							|  |  |  |         static void createContext(); | 
					
						
							| 
									
										
										
										
											2012-05-21 18:52:09 +01:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-17 14:55:30 -06:00
										 |  |  |     inline IMutableContext& getCurrentMutableContext() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if( !IMutableContext::currentContext ) | 
					
						
							|  |  |  |             IMutableContext::createContext(); | 
					
						
							|  |  |  |         return *IMutableContext::currentContext; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     inline IContext& getCurrentContext() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return getCurrentMutableContext(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-08-08 08:33:54 +01:00
										 |  |  |     void cleanUpContext(); | 
					
						
							| 
									
										
										
										
											2012-05-10 07:58:48 +01:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // TWOBLUECUBES_CATCH_CONTEXT_H_INCLUDED
 |