mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 09:01:50 +01:00 
			
		
		
		
	
		
			
	
	
		
			37 lines
		
	
	
		
			945 B
		
	
	
	
		
			C++
		
	
	
	
	
	
		
		
			
		
	
	
			37 lines
		
	
	
		
			945 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 *  Created by Phil Nash on 15/6/2018.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  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)
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "catch_singletons.hpp"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <vector>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								namespace Catch {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    namespace {
							 | 
						||
| 
								 | 
							
								        static auto getSingletons() -> std::vector<ISingleton*>*& {
							 | 
						||
| 
								 | 
							
								            static std::vector<ISingleton*>* g_singletons = nullptr;
							 | 
						||
| 
								 | 
							
								            if( !g_singletons )
							 | 
						||
| 
								 | 
							
								                g_singletons = new std::vector<ISingleton*>();
							 | 
						||
| 
								 | 
							
								            return g_singletons;
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    ISingleton::~ISingleton() {}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    void addSingleton(ISingleton* singleton ) {
							 | 
						||
| 
								 | 
							
								        getSingletons()->push_back( singleton );
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								    void cleanupSingletons() {
							 | 
						||
| 
								 | 
							
								        auto& singletons = getSingletons();
							 | 
						||
| 
								 | 
							
								        for( auto singleton : *singletons )
							 | 
						||
| 
								 | 
							
								            delete singleton;
							 | 
						||
| 
								 | 
							
								        delete singletons;
							 | 
						||
| 
								 | 
							
								        singletons = nullptr;
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								} // namespace Catch
							 |