30 lines
		
	
	
		
			393 B
		
	
	
	
		
			C++
		
	
	
		
		
			
		
	
	
			30 lines
		
	
	
		
			393 B
		
	
	
	
		
			C++
		
	
	
|  | namespace factor | ||
|  | { | ||
|  | 
 | ||
|  | struct code_root { | ||
|  | 	cell value; | ||
|  | 	bool valid; | ||
|  | 	factor_vm *parent; | ||
|  | 
 | ||
|  | 	void push() | ||
|  | 	{ | ||
|  | 		parent->code_roots.push_back(this); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	explicit code_root(cell value_, factor_vm *parent_) : | ||
|  | 		value(value_), valid(true), parent(parent_) | ||
|  | 	{ | ||
|  | 		push(); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	~code_root() | ||
|  | 	{ | ||
|  | #ifdef FACTOR_DEBUG
 | ||
|  | 		assert(parent->code_roots.back() == this); | ||
|  | #endif
 | ||
|  | 		parent->code_roots.pop_back(); | ||
|  | 	} | ||
|  | }; | ||
|  | 
 | ||
|  | } |