mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
28cc4f7543
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35172 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
34 lines
692 B
C
34 lines
692 B
C
#include <ruby.h>
|
|
#include <ruby/st.h>
|
|
|
|
static int
|
|
update_func(st_data_t *key, st_data_t *value, st_data_t arg, int existing)
|
|
{
|
|
VALUE ret = rb_yield_values(existing ? 2 : 1, (VALUE)*key, (VALUE)*value);
|
|
switch (ret) {
|
|
case Qfalse:
|
|
return ST_STOP;
|
|
case Qnil:
|
|
return ST_DELETE;
|
|
default:
|
|
*value = ret;
|
|
return ST_CONTINUE;
|
|
}
|
|
}
|
|
|
|
static VALUE
|
|
test_st_update(VALUE self, VALUE key)
|
|
{
|
|
if (st_update(RHASH_TBL(self), (st_data_t)key, update_func, 0))
|
|
return Qtrue;
|
|
else
|
|
return Qfalse;
|
|
}
|
|
|
|
void
|
|
Init_update(void)
|
|
{
|
|
VALUE st = rb_define_class_under(rb_define_module("Bug"), "StTable", rb_cHash);
|
|
rb_define_method(st, "st_update", test_st_update, 1);
|
|
}
|
|
|