static enum sym_type AsmType( TYPE type ) { type_flag mod_flags; type = TypeModFlags( type, &mod_flags ); switch( type->id ) { case TYP_POINTER : type = TypeModFlags( type->of, &mod_flags ); if( type->id == TYP_FUNCTION ) { return( CodePtrType( mod_flags ) ); } else { return( PtrType( mod_flags ) ); } break; case TYP_ARRAY : case TYP_BITFIELD : case TYP_ENUM : return( AsmType( type->of ) ); break; case TYP_CLASS : return( SYM_INT1 ); break; case TYP_FUNCTION : return( CodePtrType( mod_flags ) ); break; default: return( AsmDataType[type->id] ); break; } }
static PtrType pump(T&& val, const P& pipe) { auto&& transform = std::get<N>(pipe); return PtrType(new FinalType(transform(std::forward<T>(val)))); }
PtrType MWWorld::ContainerStoreIteratorBase<PtrType>::operator*() const { PtrType ptr; switch (mType) { case ContainerStore::Type_Potion: ptr = PtrType (&*mPotion, 0); break; case ContainerStore::Type_Apparatus: ptr = PtrType (&*mApparatus, 0); break; case ContainerStore::Type_Armor: ptr = PtrType (&*mArmor, 0); break; case ContainerStore::Type_Book: ptr = PtrType (&*mBook, 0); break; case ContainerStore::Type_Clothing: ptr = PtrType (&*mClothing, 0); break; case ContainerStore::Type_Ingredient: ptr = PtrType (&*mIngredient, 0); break; case ContainerStore::Type_Light: ptr = PtrType (&*mLight, 0); break; case ContainerStore::Type_Lockpick: ptr = PtrType (&*mLockpick, 0); break; case ContainerStore::Type_Miscellaneous: ptr = PtrType (&*mMiscellaneous, 0); break; case ContainerStore::Type_Probe: ptr = PtrType (&*mProbe, 0); break; case ContainerStore::Type_Repair: ptr = PtrType (&*mRepair, 0); break; case ContainerStore::Type_Weapon: ptr = PtrType (&*mWeapon, 0); break; } if (ptr.isEmpty()) throw std::runtime_error ("invalid iterator"); ptr.setContainerStore (mContainer); return ptr; }