6 byte_array *factor_vm::allot_byte_array(cell size)
8 byte_array *array = allot_uninitialized_array<byte_array>(size);
9 memset(array + 1,0,size);
13 VM_C_API cell allot_byte_array(cell size, factor_vm *parent)
15 return tag<byte_array>(parent->allot_byte_array(size));
18 void factor_vm::primitive_byte_array()
20 cell size = unbox_array_size();
21 ctx->push(tag<byte_array>(allot_byte_array(size)));
24 void factor_vm::primitive_uninitialized_byte_array()
26 cell size = unbox_array_size();
27 ctx->push(tag<byte_array>(allot_uninitialized_array<byte_array>(size)));
30 void factor_vm::primitive_resize_byte_array()
32 data_root<byte_array> array(ctx->pop(),this);
33 array.untag_check(this);
34 cell capacity = unbox_array_size();
35 ctx->push(tag<byte_array>(reallot_array(array.untagged(),capacity)));
38 void growable_byte_array::grow_bytes(cell len)
41 if(count >= array_capacity(elements.untagged()))
42 elements = elements.parent->reallot_array(elements.untagged(),count * 2);
45 void growable_byte_array::append_bytes(void *elts, cell len)
47 cell old_count = count;
49 memcpy(&elements->data<u8>()[old_count],elts,len);
52 void growable_byte_array::append_byte_array(cell byte_array_)
54 data_root<byte_array> byte_array(byte_array_,elements.parent);
56 cell len = array_capacity(byte_array.untagged());
57 cell new_size = count + len;
58 factor_vm *parent = elements.parent;
59 if(new_size >= array_capacity(elements.untagged()))
60 elements = parent->reallot_array(elements.untagged(),new_size * 2);
62 memcpy(&elements->data<u8>()[count],byte_array->data<u8>(),len);
67 void growable_byte_array::trim()
69 factor_vm *parent = elements.parent;
70 elements = parent->reallot_array(elements.untagged(),count);