Example #1
0
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;
    }
}
Example #2
0
 static PtrType pump(T&& val, const P& pipe)
 {
     auto&& transform = std::get<N>(pipe);
     return PtrType(new FinalType(transform(std::forward<T>(val))));
 }
Example #3
0
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;
}