6 byte_array *factor_vm::allot_byte_array(cell size)
8 byte_array *array = allot_array_internal<byte_array>(size);
9 memset(array + 1,0,size);
13 inline void factor_vm::primitive_byte_array()
15 cell size = unbox_array_size();
16 dpush(tag<byte_array>(allot_byte_array(size)));
19 PRIMITIVE_FORWARD(byte_array)
21 inline void factor_vm::primitive_uninitialized_byte_array()
23 cell size = unbox_array_size();
24 dpush(tag<byte_array>(allot_array_internal<byte_array>(size)));
27 PRIMITIVE_FORWARD(uninitialized_byte_array)
29 inline void factor_vm::primitive_resize_byte_array()
31 byte_array *array = untag_check<byte_array>(dpop());
32 cell capacity = unbox_array_size();
33 dpush(tag<byte_array>(reallot_array(array,capacity)));
36 PRIMITIVE_FORWARD(resize_byte_array)
38 void growable_byte_array::append_bytes(void *elts, cell len)
40 cell new_size = count + len;
41 factor_vm *parent_vm = elements.parent_vm;
42 if(new_size >= array_capacity(elements.untagged()))
43 elements = parent_vm->reallot_array(elements.untagged(),new_size * 2);
45 memcpy(&elements->data<u8>()[count],elts,len);
50 void growable_byte_array::append_byte_array(cell byte_array_)
52 gc_root<byte_array> byte_array(byte_array_,elements.parent_vm);
54 cell len = array_capacity(byte_array.untagged());
55 cell new_size = count + len;
56 factor_vm *parent_vm = elements.parent_vm;
57 if(new_size >= array_capacity(elements.untagged()))
58 elements = parent_vm->reallot_array(elements.untagged(),new_size * 2);
60 memcpy(&elements->data<u8>()[count],byte_array->data<u8>(),len);
65 void growable_byte_array::trim()
67 factor_vm *parent_vm = elements.parent_vm;
68 elements = parent_vm->reallot_array(elements.untagged(),count);