Struct Encoder

Source
pub struct Encoder<K: Hash, V> {
    values: Vec<(K, V)>,
    codes: AHashMap<K, u32>,
}
Expand description

This structure represents an encoder that maps unique keys to integer codes while storing associated values. It encapsulates a vector of key-value pairs alongside a hash map that records the corresponding code for each key.

The interface supports operations to insert new key-value associations, retrieve a code given a key, and decode keys and values based on their assigned codes, ensuring efficient bidirectional lookup between keys and integer representations.

Fields§

§values: Vec<(K, V)>§codes: AHashMap<K, u32>

Implementations§

Source§

impl<K: Hash + Clone + Eq, V> Encoder<K, V>

Source

pub fn new() -> Self

Creates a new encoder instance with no stored key-value pairs.

This constructor initializes the internal storage to be empty, allowing subsequent insertions to assign unique numerical codes to keys while associating corresponding values.

Source

pub fn insert(&mut self, k: K, v: V) -> u32

Inserts a new key-value pair into the encoder, assigning and returning a unique numeric code for the key.

Generates a code based on the current state of internal storage, clones the key, and stores the pair in parallel structures that maintain both an ordered list of values and a mapping from keys to their corresponding codes, enabling efficient retrieval and translation between keys and their numeric identifiers.

Source

pub fn encode(&self, t: &K) -> Option<u32>

Retrieves a numeric code corresponding to a given key from the internal mapping.

Returns an optional value representing the unique encoding if the key exists, or None otherwise.

Source

pub fn decode(&self, t: u32) -> &K

Retrieves a reference to the key corresponding to the provided encoded numeric value.

Returns the key by interpreting the given integer as an index into an internal collection, enabling reverse mapping from a numeric code back to its associated key.

Source

pub fn value(&self, t: u32) -> &V

Returns a reference to the value associated with the supplied numerical code from the internal storage. This method converts the provided u32 code into an index and accesses the corresponding entry, retrieving the second element of the stored key–value pair.

Trait Implementations§

Source§

impl<K: Hash + Clone + Eq, V> Default for Encoder<K, V>

Source§

fn default() -> Self

Returns a new instance with default settings by invoking the standard constructor. This method provides the default initialization behavior by delegating its work to the dedicated creation function, ensuring consistent instantiation for the type.

Auto Trait Implementations§

§

impl<K, V> Freeze for Encoder<K, V>

§

impl<K, V> RefUnwindSafe for Encoder<K, V>

§

impl<K, V> Send for Encoder<K, V>
where K: Send, V: Send,

§

impl<K, V> Sync for Encoder<K, V>
where K: Sync, V: Sync,

§

impl<K, V> Unpin for Encoder<K, V>
where K: Unpin, V: Unpin,

§

impl<K, V> UnwindSafe for Encoder<K, V>
where K: UnwindSafe, V: UnwindSafe,

Blanket Implementations§

Source§

impl<T> AllocForAny<T> for T

Source§

fn galloc(self) -> &'static T

Provides a method to allocate an instance of T on the heap with a static lifetime.

This implementation of galloc takes ownership of the T instance and uses the alloc function to place it in a location with a static lifetime, presumably managing it in a way that ensures its persistence for the duration of the program. This can be particularly useful for scenarios where a static lifetime is required, such as when interfacing with systems or patterns that necessitate global state or long-lived data.

Source§

fn galloc_mut(self) -> &'static T

Provides a method that moves the instance and returns a reference to it allocated with a static lifetime.

This method utilizes alloc_mut to perform the allocation, likely involving allocating the resource in a manner that ensures it lives for the entire duration of the application. These semantics allow the user to safely assume that the reference will not expire during the program’s execution, making it suitable for long-lived data structures or operations that require such guarantees.

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

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V