Skip to main content

Altrep

Trait Altrep 

Source
pub trait Altrep {
    const GUARD: AltrepGuard = AltrepGuard::RUnwind;
    const HAS_SERIALIZED_STATE: bool = false;
    const HAS_UNSERIALIZE: bool = false;
    const HAS_UNSERIALIZE_EX: bool = false;
    const HAS_DUPLICATE: bool = false;
    const HAS_DUPLICATE_EX: bool = false;
    const HAS_COERCE: bool = false;
    const HAS_INSPECT: bool = false;

    // Required method
    fn length(x: SEXP) -> R_xlen_t;

    // Provided methods
    fn serialized_state(_x: SEXP) -> SEXP { ... }
    fn unserialize(_class: SEXP, _state: SEXP) -> SEXP { ... }
    fn unserialize_ex(
        _class: SEXP,
        _state: SEXP,
        _attr: SEXP,
        _objf: i32,
        _levs: i32,
    ) -> SEXP { ... }
    fn duplicate(_x: SEXP, _deep: bool) -> SEXP { ... }
    fn duplicate_ex(_x: SEXP, _deep: bool) -> SEXP { ... }
    fn coerce(_x: SEXP, _to_type: SEXPTYPE) -> SEXP { ... }
    fn inspect(
        _x: SEXP,
        _pre: i32,
        _deep: i32,
        _pvec: i32,
        _inspect_subtree: Option<unsafe extern "C-unwind" fn(SEXP, i32, i32, i32)>,
    ) -> bool { ... }
}
Expand description

Base ALTREP methods.

length is REQUIRED (no default). All other methods are optional with HAS_* gating.

Provided Associated Constants§

Source

const GUARD: AltrepGuard = AltrepGuard::RUnwind

The guard mode for all ALTREP trampolines on this type.

Defaults to AltrepGuard::RUnwind which catches both Rust panics and R longjmps via R_UnwindProtect. This is safe for all callbacks, including those that call R API functions (e.g., Rf_mkCharLenCE, Rf_ScalarReal, into_sexp in serialization).

Override to AltrepGuard::RustUnwind if your callbacks never call R APIs and you want to save ~2ns per call, or AltrepGuard::Unsafe for trivial callbacks that cannot panic.

Source

const HAS_SERIALIZED_STATE: bool = false

Set to true to register serialized_state.

Source

const HAS_UNSERIALIZE: bool = false

Set to true to register unserialize.

Source

const HAS_UNSERIALIZE_EX: bool = false

Set to true to register unserialize_ex.

Source

const HAS_DUPLICATE: bool = false

Set to true to register duplicate.

Source

const HAS_DUPLICATE_EX: bool = false

Set to true to register duplicate_ex.

Source

const HAS_COERCE: bool = false

Set to true to register coerce.

Source

const HAS_INSPECT: bool = false

Set to true to register inspect.

Required Methods§

Source

fn length(x: SEXP) -> R_xlen_t

Returns the length of the ALTREP vector. This is REQUIRED - R cannot determine vector length without it.

Provided Methods§

Source

fn serialized_state(_x: SEXP) -> SEXP

Return serialization state.

Source

fn unserialize(_class: SEXP, _state: SEXP) -> SEXP

Reconstruct ALTREP from serialized state.

Source

fn unserialize_ex( _class: SEXP, _state: SEXP, _attr: SEXP, _objf: i32, _levs: i32, ) -> SEXP

Extended unserialization with attributes.

Source

fn duplicate(_x: SEXP, _deep: bool) -> SEXP

Duplicate the ALTREP object.

Source

fn duplicate_ex(_x: SEXP, _deep: bool) -> SEXP

Extended duplication.

Source

fn coerce(_x: SEXP, _to_type: SEXPTYPE) -> SEXP

Coerce to another type.

Source

fn inspect( _x: SEXP, _pre: i32, _deep: i32, _pvec: i32, _inspect_subtree: Option<unsafe extern "C-unwind" fn(SEXP, i32, i32, i32)>, ) -> bool

Custom inspection for .Internal(inspect()).

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl Altrep for &'static [&'static str]

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

impl Altrep for &'static [bool]

Source§

impl Altrep for &'static [f64]

Source§

impl Altrep for &'static [i32]

Source§

impl Altrep for &'static [u8]

Source§

impl Altrep for &'static [String]

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

impl Altrep for Cow<'static, [f64]>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Cow<'static, [i32]>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Cow<'static, [u8]>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Cow<'static, [Rcomplex]>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Box<[bool]>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Box<[f64]>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Box<[i32]>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Box<[u8]>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Box<[Rcomplex]>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Box<[String]>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Vec<Cow<'static, str>>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Vec<Option<Cow<'static, str>>>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Vec<Option<String>>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Vec<bool>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Vec<f64>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Vec<i32>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Vec<u8>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Vec<Rcomplex>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Vec<String>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Range<f64>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Range<i32>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl Altrep for Range<i64>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

const HAS_SERIALIZED_STATE: bool = true

Source§

const HAS_UNSERIALIZE: bool = true

Source§

fn length(x: SEXP) -> R_xlen_t

Source§

fn serialized_state(x: SEXP) -> SEXP

Source§

fn unserialize(class: SEXP, state: SEXP) -> SEXP

Source§

impl<const N: usize> Altrep for [bool; N]

Source§

impl<const N: usize> Altrep for [f64; N]

Source§

impl<const N: usize> Altrep for [i32; N]

Source§

impl<const N: usize> Altrep for [u8; N]

Source§

impl<const N: usize> Altrep for [Rcomplex; N]

Source§

impl<const N: usize> Altrep for [String; N]

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind

Source§

fn length(x: SEXP) -> R_xlen_t

Implementors§

Source§

impl<F: Fn(usize, &mut [f64]) -> usize + 'static> Altrep for StreamingRealData<F>

Source§

impl<F: Fn(usize, &mut [i32]) -> usize + 'static> Altrep for StreamingIntData<F>

Source§

impl<I, T> Altrep for IterIntCoerceData<I, T>
where I: Iterator<Item = T> + 'static, T: Coerce<i32> + Copy + 'static,

Source§

impl<I, T> Altrep for IterRealCoerceData<I, T>
where I: Iterator<Item = T> + 'static, T: Coerce<f64> + Copy + 'static,

Source§

impl<I: Iterator<Item = bool> + 'static> Altrep for IterIntFromBoolData<I>

Source§

impl<I: Iterator<Item = bool> + 'static> Altrep for IterLogicalData<I>

Source§

impl<I: Iterator<Item = bool> + 'static> Altrep for SparseIterLogicalData<I>

Source§

impl<I: Iterator<Item = f64> + 'static> Altrep for IterRealData<I>

Source§

impl<I: Iterator<Item = f64> + 'static> Altrep for SparseIterRealData<I>

Source§

impl<I: Iterator<Item = f64> + 'static> Altrep for WindowedIterRealData<I>

Source§

impl<I: Iterator<Item = i32> + 'static> Altrep for IterIntData<I>

Source§

impl<I: Iterator<Item = i32> + 'static> Altrep for SparseIterIntData<I>

Source§

impl<I: Iterator<Item = i32> + 'static> Altrep for WindowedIterIntData<I>

Source§

impl<I: Iterator<Item = u8> + 'static> Altrep for IterRawData<I>

Source§

impl<I: Iterator<Item = u8> + 'static> Altrep for SparseIterRawData<I>

Source§

impl<I: Iterator<Item = Rcomplex> + 'static> Altrep for IterComplexData<I>

Source§

impl<I: Iterator<Item = Rcomplex> + 'static> Altrep for SparseIterComplexData<I>

Source§

impl<I: Iterator<Item = SEXP> + 'static> Altrep for IterListData<I>

Source§

impl<I: Iterator<Item = String> + 'static> Altrep for IterStringData<I>

Source§

const GUARD: AltrepGuard = crate::altrep_traits::AltrepGuard::RUnwind