| 
									
										
										
										
											2013-05-11 21:40:14 -04:00
										 |  |  | namespace factor { | 
					
						
							| 
									
										
										
										
											2009-10-07 16:48:09 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-21 04:34:23 -05:00
										 |  |  | struct aging_space : bump_allocator { | 
					
						
							| 
									
										
										
										
											2013-05-11 21:40:14 -04:00
										 |  |  |   object_start_map starts; | 
					
						
							| 
									
										
										
										
											2009-10-20 14:47:04 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-12 21:48:38 -04:00
										 |  |  |   aging_space(cell size, cell start) | 
					
						
							| 
									
										
										
										
											2014-11-21 04:34:23 -05:00
										 |  |  |       : bump_allocator(size, start), starts(size, start) {} | 
					
						
							| 
									
										
										
										
											2009-10-20 14:47:04 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-11 21:40:14 -04:00
										 |  |  |   object* allot(cell size) { | 
					
						
							|  |  |  |     if (here + size > end) | 
					
						
							|  |  |  |       return NULL; | 
					
						
							| 
									
										
										
										
											2009-10-20 14:47:04 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-11-21 04:34:23 -05:00
										 |  |  |     object* obj = bump_allocator::allot(size); | 
					
						
							| 
									
										
										
										
											2013-05-11 21:40:14 -04:00
										 |  |  |     starts.record_object_start_offset(obj); | 
					
						
							|  |  |  |     return obj; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2014-11-21 03:14:55 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |   cell next_object_after(cell scan) { | 
					
						
							|  |  |  |     cell size = ((object*)scan)->size(); | 
					
						
							|  |  |  |     if (scan + size < here) | 
					
						
							|  |  |  |       return scan + size; | 
					
						
							| 
									
										
										
										
											2015-08-14 16:31:04 -04:00
										 |  |  |     return 0; | 
					
						
							| 
									
										
										
										
											2014-11-21 03:14:55 -05:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   cell first_object() { | 
					
						
							|  |  |  |     if (start != here) | 
					
						
							|  |  |  |       return start; | 
					
						
							| 
									
										
										
										
											2015-08-14 16:31:04 -04:00
										 |  |  |     return 0; | 
					
						
							| 
									
										
										
										
											2014-11-21 03:14:55 -05:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2009-10-07 16:48:09 -04:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |