Skip to main content

TwoDaCache

Struct TwoDaCache 

Source
pub struct TwoDaCache<'a> { /* private fields */ }
Expand description

Resolver-backed cache of parsed 2DA tables.

Borrows a Resolver for resref-to-bytes lookups and owns a lazily-populated HashMap of parsed TwoDa tables keyed by TwoDaName. Construct once, reuse across decode passes.

Single-threaded by design: Self::twoda takes &mut self so the cache can grow on miss without interior mutability or Arc<Mutex<_>> overhead. If a decoder needs data from two tables in one call, it should pull the typed primitives it needs out of the first borrow before requesting the next.

Implementations§

Source§

impl<'a> TwoDaCache<'a>

Source

pub fn new(resolver: &'a Resolver<'a>) -> Self

Constructs a new cache backed by the given resolver.

The resolver is borrowed for the lifetime of the cache, so the caller is free to keep adding sources to the resolver before constructing the cache but must not mutate it through that reference once the cache exists.

Source

pub fn twoda( &mut self, name: impl AsRef<str>, ) -> Result<&TwoDa, TwoDaCacheError>

Returns a reference to the named 2DA, lazily loading and caching it on first request.

name is anything that yields a bare table name string without the .2da extension. Two natural inputs:

  • a &str literal (cache.twoda("itempropdef")),
  • a TwoDaName constant from the tables module (cache.twoda(tables::ITEMPROPDEF)).

On a cache miss the name is validated, the resolver is asked for the table, and on hit the bytes are parsed via read_twoda_from_bytes before being inserted into the cache.

Errors:

Auto Trait Implementations§

§

impl<'a> Freeze for TwoDaCache<'a>

§

impl<'a> RefUnwindSafe for TwoDaCache<'a>

§

impl<'a> Send for TwoDaCache<'a>

§

impl<'a> Sync for TwoDaCache<'a>

§

impl<'a> Unpin for TwoDaCache<'a>

§

impl<'a> UnsafeUnpin for TwoDaCache<'a>

§

impl<'a> UnwindSafe for TwoDaCache<'a>

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> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
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<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
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> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> StrictAs for T

Source§

fn strict_as<Dst>(self) -> Dst
where T: StrictCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> StrictCastFrom<Src> for Dst
where Src: StrictCast<Dst>,

Source§

fn strict_cast_from(src: Src) -> Dst

Casts the value.
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.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.