Skip to main content

IterListData

Struct IterListData 

Source
pub struct IterListData<I>
where I: Iterator<Item = SEXP>,
{ state: IterState<I, SEXP>, }
Expand description

Iterator-backed list vector.

Wraps an iterator producing R SEXP values and exposes it as an ALTREP list.

§Safety

The iterator must produce valid, protected SEXP values. Each SEXP must remain protected for the lifetime of the ALTREP object.

§Example

use miniextendr_api::altrep_data::IterListData;
use miniextendr_api::IntoR;

let iter = (0..5).map(|x| vec![x, x+1, x+2].into_sexp());
let data = IterListData::from_iter(iter, 5);

Fields§

§state: IterState<I, SEXP>

Implementations§

Source§

impl<I> IterListData<I>
where I: Iterator<Item = SEXP>,

Source

pub fn from_iter(iter: I, len: usize) -> Self

Create from an iterator with explicit length.

§Safety

The iterator must produce valid, protected SEXP values.

Source§

impl<I> IterListData<I>
where I: ExactSizeIterator<Item = SEXP>,

Source

pub fn from_exact_iter(iter: I) -> Self

Create from an ExactSizeIterator (length auto-detected).

§Safety

The iterator must produce valid, protected SEXP values.

Trait Implementations§

Source§

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

Source§

fn elt(x: SEXP, i: R_xlen_t) -> SEXP

Get list element at index. Returns any SEXP. This is REQUIRED for ALTLIST - there is no default.
Source§

const HAS_SET_ELT: bool = false

Set to true to register set_elt.
Source§

fn set_elt(_x: SEXP, _i: R_xlen_t, _v: SEXP)

Set element (for mutable lists).
Source§

impl<I> AltListData for IterListData<I>
where I: Iterator<Item = SEXP>,

Source§

fn elt(&self, i: usize) -> SEXP

Get the list element at index i. Read more
Source§

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

Source§

const HAS_DATAPTR: bool = false

Set to true to register dataptr.
Source§

fn dataptr(_x: SEXP, _writable: bool) -> *mut c_void

Get raw data pointer.
Source§

const HAS_DATAPTR_OR_NULL: bool = false

Set to true to register dataptr_or_null.
Source§

fn dataptr_or_null(_x: SEXP) -> *const c_void

Get data pointer without forcing materialization.
Source§

const HAS_EXTRACT_SUBSET: bool = false

Set to true to register extract_subset.
Source§

fn extract_subset(_x: SEXP, _indx: SEXP, _call: SEXP) -> SEXP

Optimized subsetting.
Source§

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

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.
Source§

const GUARD: AltrepGuard = AltrepGuard::RUnwind

The guard mode for all ALTREP trampolines on this type. Read more
Source§

const HAS_SERIALIZED_STATE: bool = false

Set to true to register serialized_state.
Source§

fn serialized_state(_x: SEXP) -> SEXP

Return serialization state.
Source§

const HAS_UNSERIALIZE: bool = false

Set to true to register unserialize.
Source§

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

Reconstruct ALTREP from serialized state.
Source§

const HAS_UNSERIALIZE_EX: bool = false

Set to true to register unserialize_ex.
Source§

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

Extended unserialization with attributes.
Source§

const HAS_DUPLICATE: bool = false

Set to true to register duplicate.
Source§

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

Duplicate the ALTREP object.
Source§

const HAS_DUPLICATE_EX: bool = false

Set to true to register duplicate_ex.
Source§

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

Extended duplication.
Source§

const HAS_COERCE: bool = false

Set to true to register coerce.
Source§

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

Coerce to another type.
Source§

const HAS_INSPECT: bool = false

Set to true to register inspect.
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()).
Source§

impl<I> AltrepLen for IterListData<I>
where I: Iterator<Item = SEXP>,

Source§

fn len(&self) -> usize

Returns the length of this ALTREP vector.
Source§

fn is_empty(&self) -> bool

Returns true if the vector is empty.
Source§

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

Source§

const BASE: RBase = crate::altrep::RBase::List

The inferred R base type.
Source§

unsafe fn make_class( class_name: *const i8, pkg_name: *const i8, ) -> R_altrep_class_t

Create the ALTREP class handle. Read more
Source§

unsafe fn install_methods(cls: R_altrep_class_t)

Install ALTREP methods on the class. Read more
Source§

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

Source§

const TYPE_NAME: &'static str = "IterListData"

The type name as a static string (for debugging and display)
Source§

const TYPE_NAME_CSTR: &'static [u8] = b"IterListData\0"

The type name as a null-terminated C string (for R tag display)
Source§

const TYPE_ID_CSTR: &'static [u8] = b"miniextendr_api::altrep::IterListData\0"

Namespaced type ID as a null-terminated C string (for type checking). Read more

Auto Trait Implementations§

§

impl<I> !Freeze for IterListData<I>

§

impl<I> !RefUnwindSafe for IterListData<I>

§

impl<I> Send for IterListData<I>
where I: Send,

§

impl<I> !Sync for IterListData<I>

§

impl<I> Unpin for IterListData<I>
where I: Unpin,

§

impl<I> UnsafeUnpin for IterListData<I>
where I: UnsafeUnpin,

§

impl<I> UnwindSafe for IterListData<I>
where I: UnwindSafe,

Blanket Implementations§

Source§

impl<T> AltrepExtract for T
where T: TypedExternal,

Source§

unsafe fn altrep_extract_ref(x: SEXP) -> &'static T

Extract a shared reference from the ALTREP data1 slot. Read more
Source§

unsafe fn altrep_extract_mut(x: SEXP) -> &'static mut T

Extract a mutable reference from the ALTREP data1 slot. Read more
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.