mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Add new API mrb_ptr_as_string().
This commit is contained in:
@@ -43,6 +43,7 @@ void mrb_str_decref(mrb_state*, mrb_shared_string*);
|
||||
mrb_value mrb_str_literal(mrb_state*, mrb_value);
|
||||
void mrb_str_concat(mrb_state*, mrb_value, mrb_value);
|
||||
mrb_value mrb_str_plus(mrb_state*, mrb_value, mrb_value);
|
||||
mrb_value mrb_ptr_as_string(mrb_state *, void *);
|
||||
mrb_value mrb_obj_as_string(mrb_state *mrb, mrb_value obj);
|
||||
mrb_value mrb_str_resize(mrb_state *mrb, mrb_value str, int len); /* mrb_str_resize */
|
||||
mrb_value mrb_string_value(mrb_state *mrb, mrb_value *ptr); /* StringValue */
|
||||
|
||||
@@ -1534,6 +1534,36 @@ mrb_obj_as_string(mrb_state *mrb, mrb_value obj)
|
||||
return str;
|
||||
}
|
||||
|
||||
mrb_value
|
||||
mrb_ptr_as_string(mrb_state *mrb, void *p)
|
||||
{
|
||||
struct RString *p_str;
|
||||
char *p1;
|
||||
char *p2;
|
||||
intptr_t n = (intptr_t)p;
|
||||
|
||||
p_str = str_new(mrb, NULL, 2 + sizeof(uintptr_t) * CHAR_BIT / 4);
|
||||
p1 = p_str->ptr;
|
||||
*p1++ = '0';
|
||||
*p1++ = 'x';
|
||||
p2 = p1;
|
||||
|
||||
do {
|
||||
*p2++ = mrb_digitmap[n % 16];
|
||||
n /= 16;
|
||||
} while (n > 0);
|
||||
*p2 = '\0';
|
||||
p_str->len = (mrb_int)(p2 - p_str->ptr);
|
||||
|
||||
while (p1 < p2) {
|
||||
const char c = *p1;
|
||||
*p1++ = *--p2;
|
||||
*p2 = c;
|
||||
}
|
||||
|
||||
return mrb_obj_value(p_str);
|
||||
}
|
||||
|
||||
mrb_value
|
||||
mrb_check_string_type(mrb_state *mrb, mrb_value str)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user