[][src]Struct keeshond_datapack::PreparedStore

pub struct PreparedStore<T: DataObject + 'static, U> { /* fields omitted */ }

An optional companion to a DataStore. If you have data that needs initialization with a backend (for example, textures you need to upload to a GPU), PreparedStore provides a way to handle this in a two-step process that is borrow-checker-friendly.

Template parameter T is the type of the source DataObject, and template parameter U is the prepared data. This system allows you to separate logical, backend-agnostic data from backend-specific resources. For graphics, you might use T to represent the raw image data and metadata such as width and height, and use U to represent a handle to the texture in VRAM.

In order to function, you should call PreparedStore::sync() once per frame before needing to use the resources in question in your backend. This will "prepare" or "unprepare" any resources as needed.

The PreparedStore instance must be associated with a DataStore. Only one PreparedStore can be associated with any given DataStore.

Methods

impl<T: DataObject + 'static, U> PreparedStore<T, U>[src]

pub fn new(
    data_store: &mut DataStore<T>,
    data_preparer: Box<dyn DataPreparer<T, U>>
) -> Result<PreparedStore<T, U>, PreparedStoreError>
[src]

Creates a new PreparedStore that holds prepared versions U of DataObjects T, and associates with the given DataStore.

pub fn get(&self, index: DataId) -> Option<&U>[src]

Returns a reference to the prepared data by the given DataId, if one exists. Otherwise returns None.

pub fn get_mut(&mut self, index: DataId) -> Option<&mut U>[src]

Returns a mutable reference to the prepared data by the given DataId, if one exists. Otherwise returns None.

pub fn sync(
    &mut self,
    data_store: &mut DataStore<T>
) -> Result<(), PreparedStoreError>
[src]

Synchronizes this store with the associated DataStore. If any DataObjects were recently loaded, they will be prepared by calling DataPreparer::prepare(). If any were recently unloaded, they will be "unprepared" (unloaded from the backend) by calling DataPreparer::unprepare().

Auto Trait Implementations

impl<T, U> !RefUnwindSafe for PreparedStore<T, U>

impl<T, U> !Send for PreparedStore<T, U>

impl<T, U> !Sync for PreparedStore<T, U>

impl<T, U> Unpin for PreparedStore<T, U> where
    U: Unpin

impl<T, U> !UnwindSafe for PreparedStore<T, U>

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

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

The type returned in the event of a conversion error.