Ejemplo n.º 1
0
Archivo: main.cpp Proyecto: Hanmac/rwx
int unwrapenum(const VALUE &arg, const std::string& name)
{
	enumregistertype::iterator it = enumregister.find(name);
	if(it != enumregister.end())
	{
		enumtype* etype = it->second;
		if(NIL_P(arg))
			return etype->defaults;
		else if(RB_SYMBOL_P(arg))
		{
			ID id(RB_SYM2ID(arg));

			for(enumtype::value_type::iterator it2 = etype->values.begin();
					it2 != etype->values.end();
					++it2)
			{
				if(it2->second == id)
					return it2->first;
			}
			rb_raise(rb_eTypeError,"%s is not a %s-Enum.",rb_id2name(id),etype->name.c_str());
		}else if(rb_obj_is_kind_of(arg,rb_cArray) && etype->allow_array )
		{
			int result = 0;
			size_t count = RARRAY_LEN(arg);
			for(size_t i = 0; i < count; ++i)
				result = result | unwrapenum(RARRAY_AREF(arg,i),name);
		}else
			return RB_NUM2INT(arg);
	}
	return 0;
}
Ejemplo n.º 2
0
Archivo: main.cpp Proyecto: Hanmac/rwx
int unwrap_iconflag(const VALUE &val,int mask)
{
	int result = unwrapenum(val,"icon_flag");

	if((result & mask) != result)
		rb_raise(rb_eTypeError,"%" PRIsVALUE " is not a in %d mask", RB_OBJ_STRING(val), mask);
	
	return result;

}
Ejemplo n.º 3
0
T unwrapenum(const VALUE &arg){
	return (T)unwrapenum(arg,typeid(T).name());
}
Ejemplo n.º 4
0
Archivo: main.cpp Proyecto: Hanmac/rwx
int unwrap_buttonflag(const VALUE& val)
{
	return unwrapenum(val,"button_flag");
}