added byte_arrays fns to vm

db4
Phil Dawes 2009-08-17 21:37:06 +01:00
parent 25d0bb756f
commit fa46b90197
2 changed files with 30 additions and 4 deletions

View File

@ -3,32 +3,52 @@
namespace factor namespace factor
{ {
byte_array *allot_byte_array(cell size) byte_array *factorvm::allot_byte_array(cell size)
{ {
byte_array *array = allot_array_internal<byte_array>(size); byte_array *array = allot_array_internal<byte_array>(size);
memset(array + 1,0,size); memset(array + 1,0,size);
return array; return array;
} }
PRIMITIVE(byte_array) byte_array *allot_byte_array(cell size)
{
return vm->allot_byte_array(size);
}
inline void factorvm::vmprim_byte_array()
{ {
cell size = unbox_array_size(); cell size = unbox_array_size();
dpush(tag<byte_array>(allot_byte_array(size))); dpush(tag<byte_array>(allot_byte_array(size)));
} }
PRIMITIVE(uninitialized_byte_array) PRIMITIVE(byte_array)
{
PRIMITIVE_GETVM()->vmprim_byte_array();
}
inline void factorvm::vmprim_uninitialized_byte_array()
{ {
cell size = unbox_array_size(); cell size = unbox_array_size();
dpush(tag<byte_array>(allot_array_internal<byte_array>(size))); dpush(tag<byte_array>(allot_array_internal<byte_array>(size)));
} }
PRIMITIVE(resize_byte_array) PRIMITIVE(uninitialized_byte_array)
{
PRIMITIVE_GETVM()->vmprim_uninitialized_byte_array();
}
inline void factorvm::vmprim_resize_byte_array()
{ {
byte_array *array = untag_check<byte_array>(dpop()); byte_array *array = untag_check<byte_array>(dpop());
cell capacity = unbox_array_size(); cell capacity = unbox_array_size();
dpush(tag<byte_array>(reallot_array(array,capacity))); dpush(tag<byte_array>(reallot_array(array,capacity)));
} }
PRIMITIVE(resize_byte_array)
{
PRIMITIVE_GETVM()->vmprim_resize_byte_array();
}
void growable_byte_array::append_bytes(void *elts, cell len) void growable_byte_array::append_bytes(void *elts, cell len)
{ {
cell new_size = count + len; cell new_size = count + len;

View File

@ -225,6 +225,12 @@ struct factorvm {
//booleans //booleans
void box_boolean(bool value); void box_boolean(bool value);
bool to_boolean(cell value); bool to_boolean(cell value);
//byte arrays
byte_array *allot_byte_array(cell size);
inline void vmprim_byte_array();
inline void vmprim_uninitialized_byte_array();
inline void vmprim_resize_byte_array();
// next method here: // next method here: