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);
14 inline void factorvm::primitive_byte_array()
16 cell size = unbox_array_size();
17 dpush(tag<byte_array>(allot_byte_array(size)));
22 PRIMITIVE_GETVM()->primitive_byte_array();
25 inline void factorvm::primitive_uninitialized_byte_array()
27 cell size = unbox_array_size();
28 dpush(tag<byte_array>(allot_array_internal<byte_array>(size)));
31 PRIMITIVE(uninitialized_byte_array)
33 PRIMITIVE_GETVM()->primitive_uninitialized_byte_array();
36 inline void factorvm::primitive_resize_byte_array()
38 byte_array *array = untag_check<byte_array>(dpop());
39 cell capacity = unbox_array_size();
40 dpush(tag<byte_array>(reallot_array(array,capacity)));
43 PRIMITIVE(resize_byte_array)
45 PRIMITIVE_GETVM()->primitive_resize_byte_array();
48 void growable_byte_array::append_bytes(void *elts, cell len)
50 cell new_size = count + len;
51 factorvm *myvm = elements.myvm;
52 if(new_size >= array_capacity(elements.untagged()))
53 elements = myvm->reallot_array(elements.untagged(),new_size * 2);
55 memcpy(&elements->data<u8>()[count],elts,len);
60 void growable_byte_array::append_byte_array(cell byte_array_)
62 gc_root<byte_array> byte_array(byte_array_,elements.myvm);
64 cell len = array_capacity(byte_array.untagged());
65 cell new_size = count + len;
66 factorvm *myvm = elements.myvm;
67 if(new_size >= array_capacity(elements.untagged()))
68 elements = myvm->reallot_array(elements.untagged(),new_size * 2);
70 memcpy(&elements->data<u8>()[count],byte_array->data<u8>(),len);
75 void growable_byte_array::trim()
77 factorvm *myvm = elements.myvm;
78 elements = myvm->reallot_array(elements.untagged(),count);