StringTable

Struct StringTable 

Source
pub struct StringTable { /* private fields */ }
Available on crate feature strings only.
Expand description

A struct for storing strings without duplicates.

Add strings to the table with insert. The returned usize can be used to read the string back from the table’s byte representation.

Use as_bytes to obtain a byte representation of a StringTable. The byte representation is the concatenation of the strings that have been added to the table, with each individual string prefixed with its length in LEB128 encoding. The byte representation contains each string only once.

§Example

use watto::StringTable;

let mut table = StringTable::new();
let foo_offset = table.insert("foo");
let bar_offset = table.insert("bar");

let string_bytes = table.as_bytes();
assert_eq!(StringTable::read(string_bytes, foo_offset).unwrap(), "foo");
assert_eq!(StringTable::read(string_bytes, bar_offset).unwrap(), "bar");

Implementations§

Source§

impl StringTable

Source

pub fn new() -> Self

Initializes an empty StringTable.

Source

pub fn from_bytes(buffer: &[u8]) -> Result<Self, ReadStringError>

Initializes a StringTable from a previously serialized representation.

This essentially reverses the as_bytes call.

Source

pub fn insert(&mut self, s: &str) -> usize

Insert a string into this StringTable.

Returns an offset that can be used to retrieve the inserted string with read after serializing this table with as_bytes.

Source

pub fn as_bytes(&self) -> &[u8]

Returns a byte slice containing the concatenation of the strings that have been added to this StringTable.

Source

pub fn into_bytes(self) -> Vec<u8>

Returns a byte vector containing the concatenation of the strings that have been added to this StringTable.

This consumes the StringTable.

Source

pub fn read(buffer: &[u8], offset: usize) -> Result<&str, ReadStringError>

Returns the string stored at the given offset in the byte slice, if any.

Use this to retrieve a string that was previously inserted into a StringTable.

Trait Implementations§

Source§

impl Clone for StringTable

Source§

fn clone(&self) -> StringTable

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for StringTable

Source§

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

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

impl Default for StringTable

Source§

fn default() -> StringTable

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