6 byte_array *factorvm::allot_byte_array(cell size)
8 byte_array *array = allot_array_internal<byte_array>(size);
9 memset(array + 1,0,size);
13 byte_array *allot_byte_array(cell size)
15 return vm->allot_byte_array(size);
18 inline void factorvm::vmprim_byte_array()
20 cell size = unbox_array_size();
21 dpush(tag<byte_array>(allot_byte_array(size)));
26 PRIMITIVE_GETVM()->vmprim_byte_array();
29 inline void factorvm::vmprim_uninitialized_byte_array()
31 cell size = unbox_array_size();
32 dpush(tag<byte_array>(allot_array_internal<byte_array>(size)));
35 PRIMITIVE(uninitialized_byte_array)
37 PRIMITIVE_GETVM()->vmprim_uninitialized_byte_array();
40 inline void factorvm::vmprim_resize_byte_array()
42 byte_array *array = untag_check<byte_array>(dpop());
43 cell capacity = unbox_array_size();
44 dpush(tag<byte_array>(reallot_array(array,capacity)));
47 PRIMITIVE(resize_byte_array)
49 PRIMITIVE_GETVM()->vmprim_resize_byte_array();
52 void growable_byte_array::append_bytes(void *elts, cell len)
54 cell new_size = count + len;
55 factorvm *myvm = elements.myvm;
56 if(new_size >= array_capacity(elements.untagged()))
57 elements = myvm->reallot_array(elements.untagged(),new_size * 2);
59 memcpy(&elements->data<u8>()[count],elts,len);
64 void growable_byte_array::append_byte_array(cell byte_array_)
66 gc_root<byte_array> byte_array(byte_array_,elements.myvm);
68 cell len = array_capacity(byte_array.untagged());
69 cell new_size = count + len;
70 factorvm *myvm = elements.myvm;
71 if(new_size >= array_capacity(elements.untagged()))
72 elements = myvm->reallot_array(elements.untagged(),new_size * 2);
74 memcpy(&elements->data<u8>()[count],byte_array->data<u8>(),len);
79 void growable_byte_array::trim()
81 factorvm *myvm = elements.myvm;
82 elements = myvm->reallot_array(elements.untagged(),count);