Skip to main content

DatumStore

Struct DatumStore 

Source
pub struct DatumStore { /* private fields */ }
Expand description

The store of transforms that Location chains refer into.

One per document. Interning is not an optimisation here; it is what gives placements a stable notion of sameness, since two chains naming the same datum are known to agree without any floating-point comparison.

§Handles are relative to their store, and know it

A DatumId means nothing without the store that issued it, and it says which one that was. A handle from another store resolves to None rather than to whatever transform happens to sit at that index, so mixing documents is an error that shows up where it happens rather than a wrong answer several operations later.

Implementations§

Source§

impl DatumStore

Source

pub const fn new() -> Self

An empty store.

Source

pub fn insert(&mut self, transform: Datum) -> DatumId

Intern a transform, returning a handle to it.

Identical transforms are not deduplicated: recognising two matrices as equal is a tolerance question, and the whole point of the chain representation is to avoid asking it. Callers that want sharing hold on to the handle.

Source

pub fn get(&self, id: DatumId) -> Option<Datum>

The transform behind id.

Source

pub fn len(&self) -> usize

Number of interned transforms.

Source

pub fn is_empty(&self) -> bool

Whether nothing has been interned.

Source

pub fn iter(&self) -> impl Iterator<Item = (DatumId, Datum)>

Every datum, with its handle, in arena order.

Trait Implementations§

Source§

impl Clone for DatumStore

Source§

fn clone(&self) -> DatumStore

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DatumStore

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for DatumStore

Source§

fn default() -> DatumStore

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> Same for T

Source§

type Output = T

Should always be Self
§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.