string conversion functions
This commit is contained in:
parent
8f93ddd87b
commit
c6b46ae2ac
46
string.c
46
string.c
|
@ -409,6 +409,50 @@ pic_str_string_fill_ip(pic_state *pic)
|
||||||
return pic_none_value();
|
return pic_none_value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static pic_value
|
||||||
|
pic_str_list_to_string(pic_state *pic)
|
||||||
|
{
|
||||||
|
pic_str *str;
|
||||||
|
pic_value list, e;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
pic_get_args(pic, "o", &list);
|
||||||
|
|
||||||
|
str = pic_str_new_fill(pic, pic_length(pic, list), ' ');
|
||||||
|
|
||||||
|
pic_for_each (e, list) {
|
||||||
|
pic_assert_type(pic, e, char);
|
||||||
|
|
||||||
|
pic_str_set(pic, str, i++, pic_char(e));
|
||||||
|
}
|
||||||
|
|
||||||
|
return pic_obj_value(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
static pic_value
|
||||||
|
pic_str_string_to_list(pic_state *pic)
|
||||||
|
{
|
||||||
|
pic_str *str;
|
||||||
|
pic_value list;
|
||||||
|
int n, start, end, i;
|
||||||
|
|
||||||
|
n = pic_get_args(pic, "s|ii", &str, &start, &end);
|
||||||
|
|
||||||
|
switch (n) {
|
||||||
|
case 1:
|
||||||
|
start = 0;
|
||||||
|
case 2:
|
||||||
|
end = pic_strlen(str);
|
||||||
|
}
|
||||||
|
|
||||||
|
list = pic_nil_value();
|
||||||
|
|
||||||
|
for (i = start; i < end; ++i) {
|
||||||
|
pic_push(pic, pic_char_value(pic_str_ref(pic, str, i)), list);
|
||||||
|
}
|
||||||
|
return pic_reverse(pic, list);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
pic_init_str(pic_state *pic)
|
pic_init_str(pic_state *pic)
|
||||||
{
|
{
|
||||||
|
@ -421,6 +465,8 @@ pic_init_str(pic_state *pic)
|
||||||
pic_defun(pic, "string-copy!", pic_str_string_copy_ip);
|
pic_defun(pic, "string-copy!", pic_str_string_copy_ip);
|
||||||
pic_defun(pic, "string-append", pic_str_string_append);
|
pic_defun(pic, "string-append", pic_str_string_append);
|
||||||
pic_defun(pic, "string-fill!", pic_str_string_fill_ip);
|
pic_defun(pic, "string-fill!", pic_str_string_fill_ip);
|
||||||
|
pic_defun(pic, "list->string", pic_str_list_to_string);
|
||||||
|
pic_defun(pic, "string->list", pic_str_string_to_list);
|
||||||
|
|
||||||
pic_defun(pic, "string=?", pic_str_string_eq);
|
pic_defun(pic, "string=?", pic_str_string_eq);
|
||||||
pic_defun(pic, "string<?", pic_str_string_lt);
|
pic_defun(pic, "string<?", pic_str_string_lt);
|
||||||
|
|
Loading…
Reference in New Issue