예제 #1
0
	SharedStringList KRubyObject::GetPropertyNames()
	{
		SharedStringList names(new StringList());
		VALUE vars = rb_obj_instance_variables(object);
		for (int i = 0; i < RARRAY_LEN(vars); i++)
		{
			VALUE prop_name = rb_ary_entry(vars, i);
			std::string name(StringValueCStr(prop_name));
			if (name[0] == '@')
				name = name.substr(1);

			names->push_back(new std::string(name));
		}

		VALUE methodsSymbol = rb_intern("methods");
		if (!rb_obj_respond_to(object, methodsSymbol, Qfalse))
			return names;

		VALUE methods = rb_funcall(object, rb_intern("methods"), 0);
		for (int i = 0; i < RARRAY_LEN(methods); i++)
		{
			VALUE rmethodName = rb_ary_entry(methods, i);
			const char *methodName = StringValueCStr(rmethodName);
			names->push_back(new std::string(methodName));
		}

		return names;
	}
예제 #2
0
static void set_state_ivars(VALUE hash, VALUE state)
{
    VALUE ivars = rb_obj_instance_variables(state);
    int i = 0;
    for (i = 0; i < RARRAY_LEN(ivars); i++) {
        VALUE key = rb_funcall(rb_ary_entry(ivars, i), i_to_s, 0);
        long key_len = RSTRING_LEN(key);
        VALUE value = rb_iv_get(state, StringValueCStr(key));
        rb_hash_aset(hash, rb_str_intern(rb_str_substr(key, 1, key_len - 1)), value);
    }
}