2009-05-02 05:04:19 -04:00
|
|
|
#include "master.hpp"
|
|
|
|
|
|
|
|
|
|
F_BYTE_ARRAY *allot_byte_array(CELL size)
|
|
|
|
|
{
|
2009-05-02 05:43:58 -04:00
|
|
|
F_BYTE_ARRAY *array = allot_array_internal<F_BYTE_ARRAY>(size);
|
2009-05-02 05:04:19 -04:00
|
|
|
memset(array + 1,0,size);
|
|
|
|
|
return array;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void primitive_byte_array(void)
|
|
|
|
|
{
|
|
|
|
|
CELL size = unbox_array_size();
|
|
|
|
|
dpush(tag_object(allot_byte_array(size)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void primitive_uninitialized_byte_array(void)
|
|
|
|
|
{
|
|
|
|
|
CELL size = unbox_array_size();
|
2009-05-02 05:43:58 -04:00
|
|
|
dpush(tag_object(allot_array_internal<F_BYTE_ARRAY>(size)));
|
2009-05-02 05:04:19 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void primitive_resize_byte_array(void)
|
|
|
|
|
{
|
2009-05-02 05:43:58 -04:00
|
|
|
F_BYTE_ARRAY *array = untag_byte_array(dpop());
|
2009-05-02 05:04:19 -04:00
|
|
|
CELL capacity = unbox_array_size();
|
2009-05-02 05:43:58 -04:00
|
|
|
dpush(tag_object(reallot_array(array,capacity)));
|
2009-05-02 05:04:19 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void growable_byte_array_append(F_GROWABLE_BYTE_ARRAY *array, void *elts, CELL len)
|
|
|
|
|
{
|
|
|
|
|
CELL new_size = array->count + len;
|
|
|
|
|
F_BYTE_ARRAY *underlying = untag_byte_array_fast(array->array);
|
|
|
|
|
|
2009-05-02 05:43:58 -04:00
|
|
|
if(new_size >= array_capacity(underlying))
|
2009-05-02 05:04:19 -04:00
|
|
|
{
|
2009-05-02 05:43:58 -04:00
|
|
|
underlying = reallot_array(underlying,new_size * 2);
|
2009-05-02 05:04:19 -04:00
|
|
|
array->array = tag_object(underlying);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
memcpy((void *)BREF(underlying,array->count),elts,len);
|
|
|
|
|
|
|
|
|
|
array->count += len;
|
|
|
|
|
}
|