static VALUE mTokyoMessenger_iternext(VALUE vself){ VALUE vval; char *vbuf; TCRDB *db = mTokyoMessenger_getdb(vself); if(!(vbuf = tcrdbiternext2(db))) return Qnil; vval = rb_str_new2(vbuf); tcfree(vbuf); return vval; }
static VALUE mTokyoMessenger_each_key(VALUE vself){ VALUE vrv; char *kxstr; if(rb_block_given_p() != Qtrue) rb_raise(rb_eArgError, "no block given"); TCRDB *db = mTokyoMessenger_getdb(vself); vrv = Qnil; tcrdbiterinit(db); while((kxstr = tcrdbiternext2(db)) != NULL){ vrv = rb_yield_values(1, rb_str_new2(kxstr)); } return vrv; }
static VALUE cDB_values(VALUE vself){ VALUE vary; TCRDB *db; char *kxstr, *vxstr; Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db); vary = rb_ary_new2(tcrdbrnum(db)); tcrdbiterinit(db); while((kxstr = tcrdbiternext2(db)) != NULL){ vxstr = tcrdbget2(db, kxstr); rb_ary_push(vary, rb_str_new2(vxstr)); tcfree(vxstr); tcfree(kxstr); } return vary; }
static VALUE cDB_each_value(VALUE vself){ VALUE vrv; TCRDB *db; char *kxstr, *vxstr; if(rb_block_given_p() != Qtrue) rb_raise(rb_eArgError, "no block given"); Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db); vrv = Qnil; tcrdbiterinit(db); while((kxstr = tcrdbiternext2(db)) != NULL){ vxstr = tcrdbget2(db, kxstr); vrv = rb_yield_values(1, rb_str_new2(vxstr)); tcfree(vxstr); tcfree(kxstr); } return vrv; }