moved reallot_array into vm
parent
e678f6a681
commit
1b64155998
|
@ -102,16 +102,18 @@ PRIMITIVE(resize_array)
|
|||
|
||||
void growable_array::add(cell elt_)
|
||||
{
|
||||
gc_root<object> elt(elt_,elements.myvm);
|
||||
factorvm* myvm = elements.myvm;
|
||||
gc_root<object> elt(elt_,myvm);
|
||||
if(count == array_capacity(elements.untagged()))
|
||||
elements = reallot_array(elements.untagged(),count * 2);
|
||||
elements = myvm->reallot_array(elements.untagged(),count * 2);
|
||||
|
||||
set_array_nth(elements.untagged(),count++,elt.value());
|
||||
}
|
||||
|
||||
void growable_array::trim()
|
||||
{
|
||||
elements = reallot_array(elements.untagged(),count);
|
||||
factorvm *myvm = elements.myvm;
|
||||
elements = myvm->reallot_array(elements.untagged(),count);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -52,9 +52,9 @@ PRIMITIVE(resize_byte_array)
|
|||
void growable_byte_array::append_bytes(void *elts, cell len)
|
||||
{
|
||||
cell new_size = count + len;
|
||||
|
||||
factorvm *myvm = elements.myvm;
|
||||
if(new_size >= array_capacity(elements.untagged()))
|
||||
elements = reallot_array(elements.untagged(),new_size * 2);
|
||||
elements = myvm->reallot_array(elements.untagged(),new_size * 2);
|
||||
|
||||
memcpy(&elements->data<u8>()[count],elts,len);
|
||||
|
||||
|
@ -67,9 +67,9 @@ void growable_byte_array::append_byte_array(cell byte_array_)
|
|||
|
||||
cell len = array_capacity(byte_array.untagged());
|
||||
cell new_size = count + len;
|
||||
|
||||
factorvm *myvm = elements.myvm;
|
||||
if(new_size >= array_capacity(elements.untagged()))
|
||||
elements = reallot_array(elements.untagged(),new_size * 2);
|
||||
elements = myvm->reallot_array(elements.untagged(),new_size * 2);
|
||||
|
||||
memcpy(&elements->data<u8>()[count],byte_array->data<u8>(),len);
|
||||
|
||||
|
@ -78,7 +78,8 @@ void growable_byte_array::append_byte_array(cell byte_array_)
|
|||
|
||||
void growable_byte_array::trim()
|
||||
{
|
||||
elements = reallot_array(elements.untagged(),count);
|
||||
factorvm *myvm = elements.myvm;
|
||||
elements = myvm->reallot_array(elements.untagged(),count);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -31,9 +31,9 @@ template <typename T> bool reallot_array_in_place_p(T *array, cell capacity)
|
|||
return in_zone(&nursery,array) && capacity <= array_capacity(array);
|
||||
}
|
||||
|
||||
template <typename T> T *reallot_array(T *array_, cell capacity)
|
||||
template <typename TYPE> TYPE *factorvm::reallot_array(TYPE *array_, cell capacity)
|
||||
{
|
||||
gc_root<T> array(array_,vm);
|
||||
gc_root<TYPE> array(array_,this);
|
||||
|
||||
if(reallot_array_in_place_p(array.untagged(),capacity))
|
||||
{
|
||||
|
@ -46,11 +46,11 @@ template <typename T> T *reallot_array(T *array_, cell capacity)
|
|||
if(capacity < to_copy)
|
||||
to_copy = capacity;
|
||||
|
||||
T *new_array = allot_array_internal<T>(capacity);
|
||||
TYPE *new_array = allot_array_internal<TYPE>(capacity);
|
||||
|
||||
memcpy(new_array + 1,array.untagged() + 1,to_copy * T::element_size);
|
||||
memset((char *)(new_array + 1) + to_copy * T::element_size,
|
||||
0,(capacity - to_copy) * T::element_size);
|
||||
memcpy(new_array + 1,array.untagged() + 1,to_copy * TYPE::element_size);
|
||||
memset((char *)(new_array + 1) + to_copy * TYPE::element_size,
|
||||
0,(capacity - to_copy) * TYPE::element_size);
|
||||
|
||||
return new_array;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue