| 
									
										
										
										
											2013-05-11 21:41:14 -04:00
										 |  |  | namespace factor { | 
					
						
							| 
									
										
										
										
											2009-08-17 16:37:10 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-11 21:41:14 -04:00
										 |  |  | inline cell array_nth(array* array, cell slot) { | 
					
						
							|  |  |  |   FACTOR_ASSERT(slot < array_capacity(array)); | 
					
						
							|  |  |  |   FACTOR_ASSERT(array->type() == ARRAY_TYPE); | 
					
						
							|  |  |  |   return array->data()[slot]; | 
					
						
							| 
									
										
										
										
											2009-05-04 02:00:30 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-11 21:41:14 -04:00
										 |  |  | inline void factor_vm::set_array_nth(array* array, cell slot, cell value) { | 
					
						
							|  |  |  |   FACTOR_ASSERT(slot < array_capacity(array)); | 
					
						
							|  |  |  |   FACTOR_ASSERT(array->type() == ARRAY_TYPE); | 
					
						
							|  |  |  |   cell* slot_ptr = &array->data()[slot]; | 
					
						
							|  |  |  |   *slot_ptr = value; | 
					
						
							|  |  |  |   write_barrier(slot_ptr); | 
					
						
							| 
									
										
										
										
											2009-09-29 14:53:10 -04:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct growable_array { | 
					
						
							| 
									
										
										
										
											2013-05-11 21:41:14 -04:00
										 |  |  |   cell count; | 
					
						
							|  |  |  |   data_root<array> elements; | 
					
						
							| 
									
										
										
										
											2009-09-29 14:53:10 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-12 21:48:38 -04:00
										 |  |  |   growable_array(factor_vm* parent, cell capacity = 10) | 
					
						
							| 
									
										
										
										
											2013-05-11 21:41:14 -04:00
										 |  |  |       : count(0), | 
					
						
							|  |  |  |         elements(parent->allot_array(capacity, false_object), parent) {} | 
					
						
							| 
									
										
										
										
											2009-09-29 14:53:10 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-05-11 21:41:14 -04:00
										 |  |  |   void add(cell elt); | 
					
						
							|  |  |  |   void append(array* elts); | 
					
						
							|  |  |  |   void trim(); | 
					
						
							| 
									
										
										
										
											2009-09-29 14:53:10 -04:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-04 02:46:13 -04:00
										 |  |  | } |