6 array *factor_vm::allot_array(cell capacity, cell fill_)
8 data_root<object> fill(fill_,this);
9 array *new_array = allot_uninitialized_array<array>(capacity);
10 memset_cell(new_array->data(),fill.value(),capacity * sizeof(cell));
14 void factor_vm::primitive_array()
16 data_root<object> fill(dpop(),this);
17 cell capacity = unbox_array_size();
18 array *new_array = allot_uninitialized_array<array>(capacity);
19 memset_cell(new_array->data(),fill.value(),capacity * sizeof(cell));
20 dpush(tag<array>(new_array));
23 cell factor_vm::allot_array_1(cell obj_)
25 data_root<object> obj(obj_,this);
26 data_root<array> a(allot_uninitialized_array<array>(1),this);
27 set_array_nth(a.untagged(),0,obj.value());
31 cell factor_vm::allot_array_2(cell v1_, cell v2_)
33 data_root<object> v1(v1_,this);
34 data_root<object> v2(v2_,this);
35 data_root<array> a(allot_uninitialized_array<array>(2),this);
36 set_array_nth(a.untagged(),0,v1.value());
37 set_array_nth(a.untagged(),1,v2.value());
41 cell factor_vm::allot_array_4(cell v1_, cell v2_, cell v3_, cell v4_)
43 data_root<object> v1(v1_,this);
44 data_root<object> v2(v2_,this);
45 data_root<object> v3(v3_,this);
46 data_root<object> v4(v4_,this);
47 data_root<array> a(allot_uninitialized_array<array>(4),this);
48 set_array_nth(a.untagged(),0,v1.value());
49 set_array_nth(a.untagged(),1,v2.value());
50 set_array_nth(a.untagged(),2,v3.value());
51 set_array_nth(a.untagged(),3,v4.value());
55 void factor_vm::primitive_resize_array()
57 data_root<array> a(dpop(),this);
59 cell capacity = unbox_array_size();
60 dpush(tag<array>(reallot_array(a.untagged(),capacity)));
63 void growable_array::add(cell elt_)
65 factor_vm *parent = elements.parent;
66 data_root<object> elt(elt_,parent);
67 if(count == array_capacity(elements.untagged()))
68 elements = parent->reallot_array(elements.untagged(),count * 2);
70 parent->set_array_nth(elements.untagged(),count++,elt.value());
73 void growable_array::append(array *elts_)
75 factor_vm *parent = elements.parent;
76 data_root<array> elts(elts_,parent);
77 cell capacity = array_capacity(elts.untagged());
78 if(count + capacity > array_capacity(elements.untagged()))
80 elements = parent->reallot_array(elements.untagged(),
81 (count + capacity) * 2);
84 for(cell index = 0; index < capacity; index++)
85 parent->set_array_nth(elements.untagged(),count++,array_nth(elts.untagged(),index));
88 void growable_array::trim()
90 factor_vm *parent = elements.parent;
91 elements = parent->reallot_array(elements.untagged(),count);