|  |  |  | @ -6,7 +6,9 @@ | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #pragma once | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #include <cassert> | 
			
		
	
		
			
				
					|  |  |  |  | #include <cstdlib> // malloc | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | #include "meta/assert.h" | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | namespace ruc { | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | @ -16,7 +18,10 @@ public: | 
			
		
	
		
			
				
					|  |  |  |  | 	static inline T& the() | 
			
		
	
		
			
				
					|  |  |  |  | 	{ | 
			
		
	
		
			
				
					|  |  |  |  | 		if (s_instance == nullptr) { | 
			
		
	
		
			
				
					|  |  |  |  | 			s_instance = new T { s {} }; | 
			
		
	
		
			
				
					|  |  |  |  | 			// Allocate memory for this instance
 | 
			
		
	
		
			
				
					|  |  |  |  | 			s_instance = static_cast<T*>(malloc(sizeof(T))); | 
			
		
	
		
			
				
					|  |  |  |  | 			// Call the constructor using placement new
 | 
			
		
	
		
			
				
					|  |  |  |  | 			new (s_instance) T { s {} }; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		return *s_instance; | 
			
		
	
	
		
			
				
					|  |  |  | @ -24,10 +29,9 @@ public: | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	static inline void destroy() | 
			
		
	
		
			
				
					|  |  |  |  | 	{ | 
			
		
	
		
			
				
					|  |  |  |  | 		if (s_instance) { | 
			
		
	
		
			
				
					|  |  |  |  | 			delete s_instance; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		VERIFY(s_instance, "singleton does not exist"); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 		delete s_instance; | 
			
		
	
		
			
				
					|  |  |  |  | 		s_instance = nullptr; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |