// add an enum even if its name already exists enum_t add_dup_enum(DieHolder &enumeration_holder, char const *name, flags_t flag) { enum_t enum_id = add_enum(BADADDR, name, flag); // failed to add? if(enum_id == BADNODE) { qstring new_name(name); while(enum_id == BADNODE) { new_name.append('_'); EnumCmp enum_cmp(new_name.c_str()); // check if there is an existing equal enum // with the same new name if(enum_cmp.equal(enumeration_holder)) { enum_id = enum_cmp.get_enum_id(); } else { enum_id = add_enum(BADADDR, new_name.c_str(), flag); } } } return enum_id; }
void add( const field_desc_type *fld, const T& v ) { # define VTRC_REFLECT_HELPER_DEFINE_CASE_ADD( CppType, TypeName ) \ case field_desc_type::CppType: \ add##TypeName( fld, \ boost::lexical_cast<type_info##TypeName::data_type>(v)); \ break; switch( fld->cpp_type( ) ) { VTRC_REFLECT_HELPER_DEFINE_CASE_ADD( CPPTYPE_INT32, _int32 ); VTRC_REFLECT_HELPER_DEFINE_CASE_ADD( CPPTYPE_INT64, _int64 ); VTRC_REFLECT_HELPER_DEFINE_CASE_ADD( CPPTYPE_UINT32, _uint32 ); VTRC_REFLECT_HELPER_DEFINE_CASE_ADD( CPPTYPE_UINT64, _uint64 ); VTRC_REFLECT_HELPER_DEFINE_CASE_ADD( CPPTYPE_FLOAT, _float ); VTRC_REFLECT_HELPER_DEFINE_CASE_ADD( CPPTYPE_DOUBLE, _double ); VTRC_REFLECT_HELPER_DEFINE_CASE_ADD( CPPTYPE_STRING, _string ); VTRC_REFLECT_HELPER_DEFINE_CASE_ADD( CPPTYPE_BOOL, _bool ); case field_desc_type::CPPTYPE_ENUM: add_enum( fld, boost::lexical_cast<int>(v)); break; default: throw std::runtime_error( "Bad field type" ); } # undef VTRC_REFLECT_HELPER_DEFINE_CASE_SET }
void add_enum( const field_desc_type *fld, int v ) { const enum_value_type* ed(fld->enum_type( )->FindValueByNumber(v)); if( ed ) add_enum(fld, ed); else throw std::runtime_error( "Bad enum value number" ); }
void add_enum( const field_desc_type *fld, const std::string &v ) { const enum_value_type* ed(fld->enum_type( )->FindValueByName(v)); if( ed ) add_enum(fld, ed); else throw std::runtime_error( "Bad enum value name" ); }
void ObjectSettings::add_worldmap_direction(const std::string& text, worldmap::Direction* value_ptr, boost::optional<worldmap::Direction> default_value, const std::string& key, unsigned int flags) { add_enum(text, reinterpret_cast<int*>(value_ptr), {_("None"), _("West"), _("East"), _("North"), _("South")}, {"none", "west", "east", "north", "south"}, default_value ? static_cast<int>(*default_value) : boost::optional<int>(), key, flags); }
void ObjectSettings::add_direction(const std::string& text, Direction* value_ptr, boost::optional<Direction> default_value, const std::string& key, unsigned int flags) { add_enum(text, reinterpret_cast<int*>(value_ptr), {_("auto"), _("left"), _("right"), _("up"), _("down")}, {"auto", "left", "right", "up", "down"}, default_value ? static_cast<int>(*default_value) : boost::optional<int>(), key, flags); }
//-------------------------------------------------------------------------- static tid_t get_class_struct_flags_enum() { static const char enum_name[] = "ClassFlags"; enum_t id = get_enum(enum_name); if ( id != BADNODE ) return id; id = add_enum(BADADDR, enum_name, hexflag()); set_enum_bf(id, true); add_const(id, "CLASSF_HAS_DEFAULT", (1<<0), (1<<0)); add_const(id, "CLASSF_MASTER_CLASS", (1<<1), (1<<1)); add_const(id, "CLASSF_VARIANT_CLASS", (1<<2), (1<<2)); add_const(id, "CLASSF_DISCARD_ON_SAVE", (1<<3), (1<<3)); add_const(id, "CLASSF_NEVER_SAVED", (1<<4), (1<<4)); add_const(id, "CLASSF_HAS_RELOC", (1<<5), (1<<5)); add_const(id, "CLASSF_C_HANDLERS", (1<<6), (1<<6)); return id; }
//---------------------------------------------------------------------- static tid_t set_dsp_regs_enum() { static const char enum_name[] = "DSPRegisters"; enum_t id = get_enum(enum_name); if ( id != BADNODE ) return id; id = add_enum(-1, enum_name, hexflag()); add_enum_member(id, "V0VOLL" , 0x00); add_enum_member(id, "V0VOLR" , 0x01); add_enum_member(id, "V0PL" , 0x02); add_enum_member(id, "V0PH" , 0x03); add_enum_member(id, "V0SRCN" , 0x04); add_enum_member(id, "V0ADSR1" , 0x05); add_enum_member(id, "V0ADSR2" , 0x06); add_enum_member(id, "V0GAIN" , 0x07); add_enum_member(id, "V0ENVX" , 0x08); add_enum_member(id, "V0OUTX" , 0x09); add_enum_member(id, "V1VOLL" , 0x10); add_enum_member(id, "V1VOLR" , 0x11); add_enum_member(id, "V1PL" , 0x12); add_enum_member(id, "V1PH" , 0x13); add_enum_member(id, "V1SRCN" , 0x14); add_enum_member(id, "V1ADSR1" , 0x15); add_enum_member(id, "V1ADSR2" , 0x16); add_enum_member(id, "V1GAIN" , 0x17); add_enum_member(id, "V1ENVX" , 0x18); add_enum_member(id, "V1OUTX" , 0x19); add_enum_member(id, "V2VOLL" , 0x20); add_enum_member(id, "V2VOLR" , 0x21); add_enum_member(id, "V2PL" , 0x22); add_enum_member(id, "V2PH" , 0x23); add_enum_member(id, "V2SRCN" , 0x24); add_enum_member(id, "V2ADSR1" , 0x25); add_enum_member(id, "V2ADSR2" , 0x26); add_enum_member(id, "V2GAIN" , 0x27); add_enum_member(id, "V2ENVX" , 0x28); add_enum_member(id, "V2OUTX" , 0x29); add_enum_member(id, "V3VOLL" , 0x30); add_enum_member(id, "V3VOLR" , 0x31); add_enum_member(id, "V3PL" , 0x32); add_enum_member(id, "V3PH" , 0x33); add_enum_member(id, "V3SRCN" , 0x34); add_enum_member(id, "V3ADSR1" , 0x35); add_enum_member(id, "V3ADSR2" , 0x36); add_enum_member(id, "V3GAIN" , 0x37); add_enum_member(id, "V3ENVX" , 0x38); add_enum_member(id, "V3OUTX" , 0x39); add_enum_member(id, "V4VOLL" , 0x40); add_enum_member(id, "V4VOLR" , 0x41); add_enum_member(id, "V4PL" , 0x42); add_enum_member(id, "V4PH" , 0x43); add_enum_member(id, "V4SRCN" , 0x44); add_enum_member(id, "V4ADSR1" , 0x45); add_enum_member(id, "V4ADSR2" , 0x46); add_enum_member(id, "V4GAIN" , 0x47); add_enum_member(id, "V4ENVX" , 0x48); add_enum_member(id, "V4OUTX" , 0x49); add_enum_member(id, "V5VOLL" , 0x50); add_enum_member(id, "V5VOLR" , 0x51); add_enum_member(id, "V5PL" , 0x52); add_enum_member(id, "V5PH" , 0x53); add_enum_member(id, "V5SRCN" , 0x54); add_enum_member(id, "V5ADSR1" , 0x55); add_enum_member(id, "V5ADSR2" , 0x56); add_enum_member(id, "V5GAIN" , 0x57); add_enum_member(id, "V5ENVX" , 0x58); add_enum_member(id, "V5OUTX" , 0x59); add_enum_member(id, "V6VOLL" , 0x60); add_enum_member(id, "V6VOLR" , 0x61); add_enum_member(id, "V6PL" , 0x62); add_enum_member(id, "V6PH" , 0x63); add_enum_member(id, "V6SRCN" , 0x64); add_enum_member(id, "V6ADSR1" , 0x65); add_enum_member(id, "V6ADSR2" , 0x66); add_enum_member(id, "V6GAIN" , 0x67); add_enum_member(id, "V6ENVX" , 0x68); add_enum_member(id, "V6OUTX" , 0x69); add_enum_member(id, "V7VOLL" , 0x70); add_enum_member(id, "V7VOLR" , 0x71); add_enum_member(id, "V7PL" , 0x72); add_enum_member(id, "V7PH" , 0x73); add_enum_member(id, "V7SRCN" , 0x74); add_enum_member(id, "V7ADSR1" , 0x75); add_enum_member(id, "V7ADSR2" , 0x76); add_enum_member(id, "V7GAIN" , 0x77); add_enum_member(id, "V7ENVX" , 0x78); add_enum_member(id, "V7OUTX" , 0x79); add_enum_member(id, "MVOLL" , 0x0c); add_enum_member(id, "MVOLR" , 0x1c); add_enum_member(id, "EVOLL" , 0x2c); add_enum_member(id, "EVOLR" , 0x3c); add_enum_member(id, "KON" , 0x4c); add_enum_member(id, "KOF" , 0x5c); add_enum_member(id, "FLG" , 0x6c); add_enum_member(id, "ENDX" , 0x7c); add_enum_member(id, "EFB" , 0x0d); add_enum_member(id, "PMON" , 0x2d); add_enum_member(id, "NON" , 0x3d); add_enum_member(id, "EON" , 0x4d); add_enum_member(id, "DIR" , 0x5d); add_enum_member(id, "ESA" , 0x6d); add_enum_member(id, "EDL" , 0x7d); add_enum_member(id, "FIR0" , 0x0f); add_enum_member(id, "FIR1" , 0x1f); add_enum_member(id, "FIR2" , 0x2f); add_enum_member(id, "FIR3" , 0x3f); add_enum_member(id, "FIR4" , 0x4f); add_enum_member(id, "FIR5" , 0x5f); add_enum_member(id, "FIR6" , 0x6f); add_enum_member(id, "FIR7" , 0x7f); return id; }
AST_Decl *UTL_Scope::call_add() { AST_Decl *result = NULL; AST_Decl *decl; UTL_ScopeActiveIterator *i; UTL_Scope *scope; i = new UTL_ScopeActiveIterator(this, UTL_Scope::IK_decls); while (!(i->is_done())) { decl = i->item(); scope = 0; switch (decl->node_type()) { case AST_Decl::NT_argument: result = add_argument(AST_Argument::narrow_from_decl(decl)); break; case AST_Decl::NT_array: result = add_array(AST_Array::narrow_from_decl(decl)); break; case AST_Decl::NT_attr: result = add_attribute(AST_Attribute::narrow_from_decl(decl)); break; case AST_Decl::NT_const: result = add_constant(AST_Constant::narrow_from_decl(decl)); break; case AST_Decl::NT_enum: scope = AST_Enum::narrow_from_decl(decl); result = add_enum(AST_Enum::narrow_from_decl(decl)); break; case AST_Decl::NT_enum_val: result = add_enum_val(AST_EnumVal::narrow_from_decl(decl)); break; case AST_Decl::NT_except: scope = AST_Exception::narrow_from_decl(decl); result = add_exception(AST_Exception::narrow_from_decl(decl)); break; case AST_Decl::NT_field: result = add_field(AST_Field::narrow_from_decl(decl)); break; case AST_Decl::NT_interface: scope = AST_Interface::narrow_from_decl(decl); result = add_interface(AST_Interface::narrow_from_decl(decl)); break; case AST_Decl::NT_interface_fwd: result = add_interface_fwd(AST_InterfaceFwd::narrow_from_decl(decl)); break; case AST_Decl::NT_module: scope = AST_Module::narrow_from_decl(decl); result = add_module(AST_Module::narrow_from_decl(decl)); break; case AST_Decl::NT_op: result = add_operation(AST_Operation::narrow_from_decl(decl)); scope = AST_Operation::narrow_from_decl(decl); break; case AST_Decl::NT_pre_defined: result = add_predefined_type(AST_PredefinedType::narrow_from_decl(decl)); break; case AST_Decl::NT_sequence: result = add_sequence(AST_Sequence::narrow_from_decl(decl)); break; case AST_Decl::NT_string: result = add_string(AST_String::narrow_from_decl(decl)); break; case AST_Decl::NT_struct: result = add_structure(AST_Structure::narrow_from_decl(decl)); scope = AST_Structure::narrow_from_decl(decl); break; case AST_Decl::NT_typedef: result = add_typedef(AST_Typedef::narrow_from_decl(decl)); break; case AST_Decl::NT_union: result = add_union(AST_Union::narrow_from_decl(decl)); scope = AST_Union::narrow_from_decl(decl); break; case AST_Decl::NT_union_branch: result = add_union_branch(AST_UnionBranch::narrow_from_decl(decl)); break; // case AST_Decl::NT_opaque: // result = add_opaque(AST_Opaque::narrow_from_decl(decl)); // break; case AST_Decl::NT_value: result = add_valuetype (AST_Value::narrow_from_decl (decl)); scope = AST_Value::narrow_from_decl (decl); break; case AST_Decl::NT_value_fwd: result = add_valuetype_fwd(AST_ValueFwd::narrow_from_decl(decl)); break; case AST_Decl::NT_state_member: result = add_state_member(AST_StateMember::narrow_from_decl(decl)); break; default: return NULL; } if (scope) scope->call_add(); i->next(); } delete i; return result; }