moved strings fns to vm
parent
72098c5f6a
commit
0f2a89cfbd
|
@ -3,7 +3,7 @@
|
|||
namespace factor
|
||||
{
|
||||
|
||||
cell string_nth(string* str, cell index)
|
||||
cell factorvm::string_nth(string* str, cell index)
|
||||
{
|
||||
/* If high bit is set, the most significant 16 bits of the char
|
||||
come from the aux vector. The least significant bit of the
|
||||
|
@ -22,12 +22,22 @@ cell string_nth(string* str, cell index)
|
|||
}
|
||||
}
|
||||
|
||||
void set_string_nth_fast(string *str, cell index, cell ch)
|
||||
cell string_nth(string* str, cell index)
|
||||
{
|
||||
return vm->string_nth(str,index);
|
||||
}
|
||||
|
||||
void factorvm::set_string_nth_fast(string *str, cell index, cell ch)
|
||||
{
|
||||
str->data()[index] = ch;
|
||||
}
|
||||
|
||||
void set_string_nth_slow(string *str_, cell index, cell ch)
|
||||
void set_string_nth_fast(string *str, cell index, cell ch)
|
||||
{
|
||||
return vm->set_string_nth_fast(str,index,ch);
|
||||
}
|
||||
|
||||
void factorvm::set_string_nth_slow(string *str_, cell index, cell ch)
|
||||
{
|
||||
gc_root<string> str(str_);
|
||||
|
||||
|
@ -54,8 +64,13 @@ void set_string_nth_slow(string *str_, cell index, cell ch)
|
|||
aux->data<u16>()[index] = ((ch >> 7) ^ 1);
|
||||
}
|
||||
|
||||
void set_string_nth_slow(string *str_, cell index, cell ch)
|
||||
{
|
||||
return vm->set_string_nth_slow(str_,index,ch);
|
||||
}
|
||||
|
||||
/* allocates memory */
|
||||
void set_string_nth(string *str, cell index, cell ch)
|
||||
void factorvm::set_string_nth(string *str, cell index, cell ch)
|
||||
{
|
||||
if(ch <= 0x7f)
|
||||
set_string_nth_fast(str,index,ch);
|
||||
|
@ -63,8 +78,13 @@ void set_string_nth(string *str, cell index, cell ch)
|
|||
set_string_nth_slow(str,index,ch);
|
||||
}
|
||||
|
||||
void set_string_nth(string *str, cell index, cell ch)
|
||||
{
|
||||
return vm->set_string_nth(str,index,ch);
|
||||
}
|
||||
|
||||
/* Allocates memory */
|
||||
string *allot_string_internal(cell capacity)
|
||||
string *factorvm::allot_string_internal(cell capacity)
|
||||
{
|
||||
string *str = allot<string>(string_size(capacity));
|
||||
|
||||
|
@ -75,8 +95,13 @@ string *allot_string_internal(cell capacity)
|
|||
return str;
|
||||
}
|
||||
|
||||
string *allot_string_internal(cell capacity)
|
||||
{
|
||||
return vm->allot_string_internal(capacity);
|
||||
}
|
||||
|
||||
/* Allocates memory */
|
||||
void fill_string(string *str_, cell start, cell capacity, cell fill)
|
||||
void factorvm::fill_string(string *str_, cell start, cell capacity, cell fill)
|
||||
{
|
||||
gc_root<string> str(str_);
|
||||
|
||||
|
@ -91,29 +116,49 @@ void fill_string(string *str_, cell start, cell capacity, cell fill)
|
|||
}
|
||||
}
|
||||
|
||||
void fill_string(string *str_, cell start, cell capacity, cell fill)
|
||||
{
|
||||
return vm->fill_string(str_,start,capacity,fill);
|
||||
}
|
||||
|
||||
/* Allocates memory */
|
||||
string *allot_string(cell capacity, cell fill)
|
||||
string *factorvm::allot_string(cell capacity, cell fill)
|
||||
{
|
||||
gc_root<string> str(allot_string_internal(capacity));
|
||||
fill_string(str.untagged(),0,capacity,fill);
|
||||
return str.untagged();
|
||||
}
|
||||
|
||||
PRIMITIVE(string)
|
||||
string *allot_string(cell capacity, cell fill)
|
||||
{
|
||||
return vm->allot_string(capacity,fill);
|
||||
}
|
||||
|
||||
inline void factorvm::vmprim_string()
|
||||
{
|
||||
cell initial = to_cell(dpop());
|
||||
cell length = unbox_array_size();
|
||||
dpush(tag<string>(allot_string(length,initial)));
|
||||
}
|
||||
|
||||
static bool reallot_string_in_place_p(string *str, cell capacity)
|
||||
PRIMITIVE(string)
|
||||
{
|
||||
PRIMITIVE_GETVM()->vmprim_string();
|
||||
}
|
||||
|
||||
bool factorvm::reallot_string_in_place_p(string *str, cell capacity)
|
||||
{
|
||||
return in_zone(&nursery,str)
|
||||
&& (str->aux == F || in_zone(&nursery,untag<byte_array>(str->aux)))
|
||||
&& capacity <= string_capacity(str);
|
||||
}
|
||||
|
||||
string* reallot_string(string *str_, cell capacity)
|
||||
bool reallot_string_in_place_p(string *str, cell capacity)
|
||||
{
|
||||
return vm->reallot_string_in_place_p(str,capacity);
|
||||
}
|
||||
|
||||
string* factorvm::reallot_string(string *str_, cell capacity)
|
||||
{
|
||||
gc_root<string> str(str_);
|
||||
|
||||
|
@ -155,21 +200,36 @@ string* reallot_string(string *str_, cell capacity)
|
|||
}
|
||||
}
|
||||
|
||||
PRIMITIVE(resize_string)
|
||||
string* reallot_string(string *str_, cell capacity)
|
||||
{
|
||||
return vm->reallot_string(str_,capacity);
|
||||
}
|
||||
|
||||
inline void factorvm::vmprim_resize_string()
|
||||
{
|
||||
string* str = untag_check<string>(dpop());
|
||||
cell capacity = unbox_array_size();
|
||||
dpush(tag<string>(reallot_string(str,capacity)));
|
||||
}
|
||||
|
||||
PRIMITIVE(string_nth)
|
||||
PRIMITIVE(resize_string)
|
||||
{
|
||||
PRIMITIVE_GETVM()->vmprim_resize_string();
|
||||
}
|
||||
|
||||
inline void factorvm::vmprim_string_nth()
|
||||
{
|
||||
string *str = untag<string>(dpop());
|
||||
cell index = untag_fixnum(dpop());
|
||||
dpush(tag_fixnum(string_nth(str,index)));
|
||||
}
|
||||
|
||||
PRIMITIVE(set_string_nth_fast)
|
||||
PRIMITIVE(string_nth)
|
||||
{
|
||||
PRIMITIVE_GETVM()->vmprim_string_nth();
|
||||
}
|
||||
|
||||
inline void factorvm::vmprim_set_string_nth_fast()
|
||||
{
|
||||
string *str = untag<string>(dpop());
|
||||
cell index = untag_fixnum(dpop());
|
||||
|
@ -177,7 +237,12 @@ PRIMITIVE(set_string_nth_fast)
|
|||
set_string_nth_fast(str,index,value);
|
||||
}
|
||||
|
||||
PRIMITIVE(set_string_nth_slow)
|
||||
PRIMITIVE(set_string_nth_fast)
|
||||
{
|
||||
PRIMITIVE_GETVM()->vmprim_set_string_nth_fast();
|
||||
}
|
||||
|
||||
inline void factorvm::vmprim_set_string_nth_slow()
|
||||
{
|
||||
string *str = untag<string>(dpop());
|
||||
cell index = untag_fixnum(dpop());
|
||||
|
@ -185,4 +250,9 @@ PRIMITIVE(set_string_nth_slow)
|
|||
set_string_nth_slow(str,index,value);
|
||||
}
|
||||
|
||||
PRIMITIVE(set_string_nth_slow)
|
||||
{
|
||||
PRIMITIVE_GETVM()->vmprim_set_string_nth_slow();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
16
vm/vm.hpp
16
vm/vm.hpp
|
@ -205,6 +205,22 @@ struct factorvm {
|
|||
cell allot_array_2(cell v1_, cell v2_);
|
||||
cell allot_array_4(cell v1_, cell v2_, cell v3_, cell v4_);
|
||||
inline void vmprim_resize_array();
|
||||
|
||||
//strings
|
||||
cell string_nth(string* str, cell index);
|
||||
void set_string_nth_fast(string *str, cell index, cell ch);
|
||||
void set_string_nth_slow(string *str_, cell index, cell ch);
|
||||
void set_string_nth(string *str, cell index, cell ch);
|
||||
string *allot_string_internal(cell capacity);
|
||||
void fill_string(string *str_, cell start, cell capacity, cell fill);
|
||||
string *allot_string(cell capacity, cell fill);
|
||||
inline void vmprim_string();
|
||||
bool reallot_string_in_place_p(string *str, cell capacity);
|
||||
string* reallot_string(string *str_, cell capacity);
|
||||
inline void vmprim_resize_string();
|
||||
inline void vmprim_string_nth();
|
||||
inline void vmprim_set_string_nth_fast();
|
||||
inline void vmprim_set_string_nth_slow();
|
||||
// next method here:
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue