frozen_collections_core/inline_maps/
inline_dense_scalar_lookup_map.rs

1use crate::maps::decl_macros::{
2    common_primary_funcs, debug_trait_funcs, dense_scalar_lookup_primary_funcs, get_disjoint_mut_funcs, index_trait_funcs,
3    into_iterator_trait_funcs, into_iterator_trait_mut_ref_funcs, into_iterator_trait_ref_funcs, len_trait_funcs, map_extras_trait_funcs,
4    map_iteration_trait_funcs, map_query_trait_funcs, partial_eq_trait_funcs,
5};
6use crate::maps::{IntoIter, IntoKeys, IntoValues, Iter, IterMut, Keys, Values, ValuesMut};
7use crate::traits::{Len, Map, MapExtras, MapIteration, MapQuery, Scalar};
8use core::fmt::{Debug, Formatter, Result};
9use core::ops::Index;
10use equivalent::Comparable;
11
12#[cfg(feature = "serde")]
13use {
14    crate::maps::decl_macros::serialize_trait_funcs,
15    serde::ser::SerializeMap,
16    serde::{Serialize, Serializer},
17};
18
19/// A map whose keys are a continuous range in a sequence of scalar values.
20///
21#[doc = include_str!("../doc_snippets/private_api_warning.md")]
22#[doc = include_str!("../doc_snippets/about.md")]
23///
24/// # Type Parameters
25///
26/// - `K`: The key type.
27/// - `V`: The value type.
28/// - `SZ`: The number of entries in the map.
29#[derive(Clone)]
30pub struct InlineDenseScalarLookupMap<K, V, const SZ: usize> {
31    min: usize,
32    max: usize,
33    entries: [(K, V); SZ],
34}
35
36impl<K, V, const SZ: usize> InlineDenseScalarLookupMap<K, V, SZ> {
37    /// Creates a frozen map.
38    ///
39    /// This function assumes that `min` <= `max` and that the vector is sorted according to the
40    /// order of the [`Ord`] trait.
41    #[must_use]
42    pub const fn new_raw(sorted_and_dedupped_entries: [(K, V); SZ], min: usize, max: usize) -> Self {
43        Self {
44            min,
45            max,
46            entries: sorted_and_dedupped_entries,
47        }
48    }
49
50    dense_scalar_lookup_primary_funcs!();
51    common_primary_funcs!(const_len, entries);
52}
53
54impl<K, V, Q, const SZ: usize> Map<K, V, Q> for InlineDenseScalarLookupMap<K, V, SZ> where Q: Scalar + Comparable<K> {}
55
56impl<K, V, Q, const SZ: usize> MapExtras<K, V, Q> for InlineDenseScalarLookupMap<K, V, SZ>
57where
58    Q: Scalar + Comparable<K>,
59{
60    map_extras_trait_funcs!();
61}
62
63impl<K, V, Q, const SZ: usize> MapQuery<Q, V> for InlineDenseScalarLookupMap<K, V, SZ>
64where
65    Q: Scalar + Comparable<K>,
66{
67    map_query_trait_funcs!();
68}
69
70impl<K, V, const SZ: usize> MapIteration<K, V> for InlineDenseScalarLookupMap<K, V, SZ> {
71    type Iterator<'a>
72        = Iter<'a, K, V>
73    where
74        K: 'a,
75        V: 'a;
76
77    type KeyIterator<'a>
78        = Keys<'a, K, V>
79    where
80        K: 'a,
81        V: 'a;
82
83    type ValueIterator<'a>
84        = Values<'a, K, V>
85    where
86        K: 'a,
87        V: 'a;
88
89    type MutIterator<'a>
90        = IterMut<'a, K, V>
91    where
92        K: 'a,
93        V: 'a;
94
95    type ValueMutIterator<'a>
96        = ValuesMut<'a, K, V>
97    where
98        K: 'a,
99        V: 'a;
100
101    map_iteration_trait_funcs!();
102}
103
104impl<K, V, const SZ: usize> Len for InlineDenseScalarLookupMap<K, V, SZ> {
105    len_trait_funcs!();
106}
107
108impl<K, V, Q, const SZ: usize> Index<&Q> for InlineDenseScalarLookupMap<K, V, SZ>
109where
110    Q: Comparable<K> + Scalar,
111{
112    index_trait_funcs!();
113}
114
115impl<K, V, const SZ: usize> IntoIterator for InlineDenseScalarLookupMap<K, V, SZ> {
116    into_iterator_trait_funcs!();
117}
118
119impl<'a, K, V, const SZ: usize> IntoIterator for &'a InlineDenseScalarLookupMap<K, V, SZ> {
120    into_iterator_trait_ref_funcs!();
121}
122
123impl<'a, K, V, const SZ: usize> IntoIterator for &'a mut InlineDenseScalarLookupMap<K, V, SZ> {
124    into_iterator_trait_mut_ref_funcs!();
125}
126
127impl<K, V, MT, const SZ: usize> PartialEq<MT> for InlineDenseScalarLookupMap<K, V, SZ>
128where
129    K: Scalar,
130    V: PartialEq,
131    MT: MapQuery<K, V>,
132{
133    partial_eq_trait_funcs!();
134}
135
136impl<K, V, const SZ: usize> Eq for InlineDenseScalarLookupMap<K, V, SZ>
137where
138    K: Scalar,
139    V: Eq,
140{
141}
142
143impl<K, V, const SZ: usize> Debug for InlineDenseScalarLookupMap<K, V, SZ>
144where
145    K: Debug,
146    V: Debug,
147{
148    debug_trait_funcs!();
149}
150
151#[cfg(feature = "serde")]
152impl<K, V, const SZ: usize> Serialize for InlineDenseScalarLookupMap<K, V, SZ>
153where
154    K: Serialize,
155    V: Serialize,
156{
157    serialize_trait_funcs!();
158}