Struct csf::ls::CMap

source ·
pub struct CMap<C, S = BuildDefaultSeededHasher> {
    pub value_fragments: Map<S>,
    pub value_coding: C,
}
Expand description

Compressed static function (immutable map) that maps hashable keys to values of any type.

To represent a function f:X→Y, it uses the space slightly larger than |X|H (the overhead is 23% or slightly more), where H is the entropy of the distribution of the f values over X. The time complexity is O(c) for evaluation and O(|X|c) for construction (not counting building the encoding dictionary), where c is the average codeword length (given in code fragments) of the values.

It uses Map based on solving linear system to store fragments of value codes and usually minimum_redundancy::Coding to compress values.

Fields§

§value_fragments: Map<S>§value_coding: C

Implementations§

source§

impl<C: SerializableCoding, S> CMap<C, S>

source

pub fn write_bytes(&self, bytes_per_value: usize) -> usize

Returns the number of bytes which write will write, assuming that each call to write_value writes bytes_per_value bytes.

source

pub fn write<F>(&self, output: &mut dyn Write, write_value: F) -> Result<()>
where F: FnMut(&mut dyn Write, &C::Value) -> Result<()>,

Writes self to the output using write_value to write values.

source

pub fn read_with_hasher<F>( input: &mut dyn Read, read_value: F, hasher: S ) -> Result<Self>
where F: FnMut(&mut dyn Read) -> Result<C::Value>,

Reads self from the input, using read_value to read values (hasher must be the same as used by stored BDZHMap).

source§

impl<C: SerializableCoding> CMap<C, BuildHasherDefault<DefaultHasher>>

source

pub fn read<F>(input: &mut dyn Read, read_value: F) -> Result<Self>
where F: FnMut(&mut dyn Read) -> Result<C::Value>,

Reads BDZHMap from the input using read_value to read values. Only BDZHMaps that use default hasher can be read by this method.

source§

impl<C: Coding, S: BuildSeededHasher> CMap<C, S>

source

pub fn try_from_mapf_with_coding_conf<'a, K, V, KvIntoIter, FKvIntoIter, BM>( map: FKvIntoIter, value_coding: C, conf: MapConf<BM, S>, extra_bits_per_fragment: u8 ) -> Option<Self>
where K: Hash + 'a, V: Borrow<<C as Coding>::Value> + 'a, KvIntoIter: IntoIterator<Item = (&'a K, &'a V)> + 'a, FKvIntoIter: Fn() -> KvIntoIter, BM: ValuesPreFiller,

Underlying Map uses value_coding.bits_per_fragment()+extra_bits_per_fragment bits per fragment. extra_bits_per_fragment>0 increases a chance of detection absence of the key by get and get_stats.

source

pub fn try_from_map_with_coding_conf<K, MS, BM, V>( map: &HashMap<K, V, MS>, value_coding: C, conf: MapConf<BM, S>, bdz_extra_bits_per_fragment: u8 ) -> Option<Self>
where K: Hash, BM: ValuesPreFiller, V: Borrow<<C as Coding>::Value>,

source

pub fn try_from_kv_with_coding_conf<K, BM, V>( keys: &[K], values: &[V], value_coding: C, conf: MapConf<BM, S>, bdz_extra_bits_per_fragment: u8 ) -> Option<Self>
where K: Hash, BM: ValuesPreFiller, V: Borrow<<C as Coding>::Value>,

source§

impl<C: Coding> CMap<C>

source

pub fn try_from_map_with_coding<K, MS, V>( map: &HashMap<K, V, MS>, value_coding: C, bdz_extra_bits_per_fragment: u8 ) -> Option<Self>
where K: Hash, V: Borrow<<C as Coding>::Value>,

source

pub fn try_from_mapf_with_coding<'a, K, KvIntoIter, FKvIntoIter, V>( map: FKvIntoIter, value_coding: C, bdz_extra_bits_per_fragment: u8 ) -> Option<Self>
where K: Hash + 'a, V: Borrow<<C as Coding>::Value> + 'a, KvIntoIter: IntoIterator<Item = (&'a K, &'a V)> + 'a, FKvIntoIter: Fn() -> KvIntoIter,

source

pub fn try_from_kv_with_coding<K, V>( keys: &[K], values: &[V], value_coding: C, bdz_extra_bits_per_fragment: u8 ) -> Option<Self>
where K: Hash, V: Borrow<<C as Coding>::Value>,

source§

impl<C: Coding, S: BuildSeededHasher> CMap<C, S>

source

pub fn try_from_map_with_builder_bpf_conf<K, MS, BM, BC>( map: &HashMap<K, C::Value, MS>, build_coding: &BC, bits_per_fragment: u8, conf: MapConf<BM, S>, bdz_extra_bits_per_fragment: u8 ) -> Option<Self>
where K: Hash, BM: ValuesPreFiller, BC: BuildCoding<C::Value, Coding = C>,

source

pub fn try_from_map_with_builder_conf<K, MS, BM, BC>( map: &HashMap<K, C::Value, MS>, build_coding: &BC, conf: MapConf<BM, S>, bdz_extra_bits_per_fragment: u8 ) -> Option<Self>
where K: Hash, BM: ValuesPreFiller, BC: BuildCoding<C::Value, Coding = C>,

source

pub fn try_from_kv_with_builder_bpf_conf<K, BM, BC>( keys: &[K], values: &[C::Value], build_coding: &BC, bits_per_fragment: u8, conf: MapConf<BM, S>, bdz_extra_bits_per_fragment: u8 ) -> Option<Self>
where K: Hash, BM: ValuesPreFiller, BC: BuildCoding<C::Value, Coding = C>,

source

pub fn try_from_kv_with_builder_conf<K, BM, BC>( keys: &[K], values: &[C::Value], build_coding: &BC, conf: MapConf<BM, S>, bdz_extra_bits_per_fragment: u8 ) -> Option<Self>
where K: Hash, BM: ValuesPreFiller, BC: BuildCoding<C::Value, Coding = C>,

source§

impl<V: Hash + Eq + Clone, S: BuildSeededHasher> CMap<Coding<V>, S>

source

pub fn try_from_map_with_conf<K, MS, BM>( map: &HashMap<K, V, MS>, bits_per_fragment: u8, conf: MapConf<BM, S>, bdz_extra_bits_per_fragment: u8 ) -> Option<Self>
where K: Hash, BM: ValuesPreFiller,

source

pub fn try_from_kv_with_conf<K, BM>( keys: &[K], values: &[V], bits_per_fragment: u8, conf: MapConf<BM, S>, bdz_extra_bits_per_fragment: u8 ) -> Option<Self>
where K: Hash, BM: ValuesPreFiller,

source§

impl<V: Hash + Eq + Clone> CMap<Coding<V>>

source

pub fn try_from_map<K: Hash, MS>( map: &HashMap<K, V, MS>, bits_per_fragment: u8, bdz_extra_bits_per_fragment: u8 ) -> Option<Self>

source

pub fn try_from_mapf<'a, K, KvIntoIter, FKvIntoIter, BM>( map: FKvIntoIter, bits_per_fragment: u8, bdz_extra_bits_per_fragment: u8 ) -> Option<Self>
where K: Hash + 'a, V: 'a, KvIntoIter: IntoIterator<Item = (&'a K, &'a V)> + 'a, FKvIntoIter: Fn() -> KvIntoIter,

source

pub fn try_from_kv<K: Hash>( keys: &[K], values: &[V], bits_per_fragment: u8, bdz_extra_bits_per_fragment: u8 ) -> Option<Self>

source§

impl<C: Coding, S: BuildSeededHasher> CMap<C, S>

source

pub fn get_stats<K: Hash + ?Sized, A: AccessStatsCollector>( &self, k: &K, access_stats: &mut A ) -> Option<<<C as Coding>::Decoder<'_> as Decoder>::Decoded>

Gets the value associated with the given key k and reports statistics to access_stats.

source

pub fn get<K: Hash + ?Sized>( &self, k: &K ) -> Option<<<C as Coding>::Decoder<'_> as Decoder>::Decoded>

Gets the value associated with the given key k.

Trait Implementations§

source§

impl<C: GetSize, S> GetSize for CMap<C, S>

source§

fn size_bytes_dyn(&self) -> usize

Returns approximate number of bytes occupied by dynamic (heap) part of self. Same as self.size_bytes() - std::mem::size_of_val(self).
source§

const USES_DYN_MEM: bool = _

true if and only if the variables of this type can use dynamic (heap) memory.
source§

fn size_bytes_content_dyn(&self) -> usize

Returns approximate number of bytes occupied by dynamic (heap) part of self content. It usually equals to size_bytes_dyn(). However, sometimes it is smaller by the amount of memory reserved but not yet used (e.g., size_bytes_content_dyn() only takes into account the length of the vector and not its capacity).
source§

fn size_bytes(&self) -> usize

Returns approximate, total (including heap memory) number of bytes occupied by self.

Auto Trait Implementations§

§

impl<C, S> RefUnwindSafe for CMap<C, S>

§

impl<C, S> Send for CMap<C, S>
where C: Send, S: Send,

§

impl<C, S> Sync for CMap<C, S>
where C: Sync, S: Sync,

§

impl<C, S> Unpin for CMap<C, S>
where C: Unpin, S: Unpin,

§

impl<C, S> UnwindSafe for CMap<C, S>
where C: UnwindSafe, S: UnwindSafe,

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

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

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

§

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

§

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.