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();
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								}
							 |