frozen_collections_core/inline_maps/
inline_dense_scalar_lookup_map.rs1use 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#[doc = include_str!("../doc_snippets/private_api_warning.md")]
22#[doc = include_str!("../doc_snippets/about.md")]
23#[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 #[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}