# Trait miri::interpret::Projectable

source ·

    pub trait Projectable<'tcx, Prov>: Sized + Debugwhere
        Prov: Provenance,{
        // Required methods
        fn layout(&self) -> TyAndLayout<'tcx, Ty<'tcx>>;
        fn meta(&self) -> MemPlaceMeta<Prov>;
        fn offset_with_meta<'mir, M>(
            &self,
            offset: Size,
            mode: OffsetMode,
            meta: MemPlaceMeta<Prov>,
            layout: TyAndLayout<'tcx, Ty<'tcx>>,
            ecx: &InterpCx<'mir, 'tcx, M>
        ) -> Result<Self, InterpErrorInfo<'tcx>>
           where M: Machine<'mir, 'tcx, Provenance = Prov>;
        fn to_op<'mir, M>(
            &self,
            ecx: &InterpCx<'mir, 'tcx, M>
        ) -> Result<OpTy<'tcx, <M as Machine<'mir, 'tcx>>::Provenance>, InterpErrorInfo<'tcx>>
           where M: Machine<'mir, 'tcx, Provenance = Prov>;

        // Provided methods
        fn len<'mir, M>(
            &self,
            ecx: &InterpCx<'mir, 'tcx, M>
        ) -> Result<u64, InterpErrorInfo<'tcx>>
           where M: Machine<'mir, 'tcx, Provenance = Prov> { ... }
        fn offset<'mir, M>(
            &self,
            offset: Size,
            layout: TyAndLayout<'tcx, Ty<'tcx>>,
            ecx: &InterpCx<'mir, 'tcx, M>
        ) -> Result<Self, InterpErrorInfo<'tcx>>
           where M: Machine<'mir, 'tcx, Provenance = Prov> { ... }
        fn transmute<'mir, M>(
            &self,
            layout: TyAndLayout<'tcx, Ty<'tcx>>,
            ecx: &InterpCx<'mir, 'tcx, M>
        ) -> Result<Self, InterpErrorInfo<'tcx>>
           where M: Machine<'mir, 'tcx, Provenance = Prov> { ... }
    }

Expand description

A thing that we can project into, and that has a layout.

## Required Methods§

source

#### fn layout(&self) -> TyAndLayout<'tcx, Ty<'tcx>>

Get the layout.

source

#### fn meta(&self) -> MemPlaceMeta<Prov>

Get the metadata of a wide value.

source

#### fn offset_with_meta<'mir, M>( &self, offset: Size, mode: OffsetMode, meta: MemPlaceMeta<Prov>, layout: TyAndLayout<'tcx, Ty<'tcx>>, ecx: &InterpCx<'mir, 'tcx, M> ) -> Result<Self, InterpErrorInfo<'tcx>>
where M: Machine<'mir, 'tcx, Provenance = Prov>,

Offset the value by the given amount, replacing the layout and metadata.

source

#### fn to_op<'mir, M>( &self, ecx: &InterpCx<'mir, 'tcx, M> ) -> Result<OpTy<'tcx, <M as Machine<'mir, 'tcx>>::Provenance>, InterpErrorInfo<'tcx>>
where M: Machine<'mir, 'tcx, Provenance = Prov>,

Convert this to an `OpTy`. This might be an irreversible transformation, but is useful for reading from this thing.

## Provided Methods§

source

#### fn len<'mir, M>( &self, ecx: &InterpCx<'mir, 'tcx, M> ) -> Result<u64, InterpErrorInfo<'tcx>>
where M: Machine<'mir, 'tcx, Provenance = Prov>,

Get the length of a slice/string/array stored here.

source

#### fn offset<'mir, M>( &self, offset: Size, layout: TyAndLayout<'tcx, Ty<'tcx>>, ecx: &InterpCx<'mir, 'tcx, M> ) -> Result<Self, InterpErrorInfo<'tcx>>
where M: Machine<'mir, 'tcx, Provenance = Prov>,

source

#### fn transmute<'mir, M>( &self, layout: TyAndLayout<'tcx, Ty<'tcx>>, ecx: &InterpCx<'mir, 'tcx, M> ) -> Result<Self, InterpErrorInfo<'tcx>>
where M: Machine<'mir, 'tcx, Provenance = Prov>,

## Object Safety§

This trait is not object safe.

## Implementors§

source§

### impl<'tcx, Prov> Projectable<'tcx, Prov> for ImmTy<'tcx, Prov>
where Prov: Provenance,

source§

### impl<'tcx, Prov> Projectable<'tcx, Prov> for MPlaceTy<'tcx, Prov>
where Prov: Provenance,

source§

### impl<'tcx, Prov> Projectable<'tcx, Prov> for OpTy<'tcx, Prov>
where Prov: Provenance,

source§

### impl<'tcx, Prov> Projectable<'tcx, Prov> for PlaceTy<'tcx, Prov>
where Prov: Provenance,