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)));
21 PRIMITIVE_GETVM()->primitive_byte_array();
24 inline void factor_vm::primitive_uninitialized_byte_array()
26 cell size = unbox_array_size();
27 dpush(tag<byte_array>(allot_array_internal<byte_array>(size)));
30 PRIMITIVE(uninitialized_byte_array)
32 PRIMITIVE_GETVM()->primitive_uninitialized_byte_array();
35 inline void factor_vm::primitive_resize_byte_array()
37 byte_array *array = untag_check<byte_array>(dpop());
38 cell capacity = unbox_array_size();
39 dpush(tag<byte_array>(reallot_array(array,capacity)));
42 PRIMITIVE(resize_byte_array)
44 PRIMITIVE_GETVM()->primitive_resize_byte_array();
47 void growable_byte_array::append_bytes(void *elts, cell len)
49 cell new_size = count + len;
50 factor_vm *parent_vm = elements.parent_vm;
51 if(new_size >= array_capacity(elements.untagged()))
52 elements = parent_vm->reallot_array(elements.untagged(),new_size * 2);
54 memcpy(&elements->data<u8>()[count],elts,len);
59 void growable_byte_array::append_byte_array(cell byte_array_)
61 gc_root<byte_array> byte_array(byte_array_,elements.parent_vm);
63 cell len = array_capacity(byte_array.untagged());
64 cell new_size = count + len;
65 factor_vm *parent_vm = elements.parent_vm;
66 if(new_size >= array_capacity(elements.untagged()))
67 elements = parent_vm->reallot_array(elements.untagged(),new_size * 2);
69 memcpy(&elements->data<u8>()[count],byte_array->data<u8>(),len);
74 void growable_byte_array::trim()
76 factor_vm *parent_vm = elements.parent_vm;
77 elements = parent_vm->reallot_array(elements.untagged(),count);