frozen_collections_core/inline_sets/
inline_sparse_scalar_lookup_set.rs

1use crate::inline_maps::InlineSparseScalarLookupMap;
2use crate::sets::decl_macros::{
3    bitand_trait_funcs, bitor_trait_funcs, bitxor_trait_funcs, common_primary_funcs, debug_trait_funcs, into_iterator_ref_trait_funcs,
4    into_iterator_trait_funcs, partial_eq_trait_funcs, set_extras_trait_funcs, set_iteration_trait_funcs, set_query_trait_funcs,
5    sparse_scalar_lookup_primary_funcs, sub_trait_funcs,
6};
7use crate::sets::{IntoIter, Iter};
8use crate::traits::{CollectionMagnitude, Len, Scalar, Set, SetExtras, SetIteration, SetOps, SetQuery, SmallCollection};
9use core::fmt::Debug;
10use core::hash::Hash;
11use core::ops::{BitAnd, BitOr, BitXor, Sub};
12use equivalent::Comparable;
13
14use crate::maps::decl_macros::len_trait_funcs;
15#[cfg(feature = "serde")]
16use {
17    crate::sets::decl_macros::serialize_trait_funcs,
18    serde::ser::SerializeSeq,
19    serde::{Serialize, Serializer},
20};
21
22/// A set whose values are scalars.
23///
24#[doc = include_str!("../doc_snippets/private_api_warning.md")]
25#[doc = include_str!("../doc_snippets/about.md")]
26///
27/// # Type Parameters
28///
29/// - `T`: The value type.
30/// - `CM`: The magnitude of the set, one of [`SmallCollection`](SmallCollection), [`MediumCollection`](crate::traits::MediumCollection), or [`LargeCollection`](crate::traits::LargeCollection).
31/// - `SZ`: The number of entries in the set.
32/// - `LTSZ`: The number of entries in the lookup table.
33#[derive(Clone)]
34pub struct InlineSparseScalarLookupSet<T, const SZ: usize, const LTSZ: usize, CM = SmallCollection> {
35    map: InlineSparseScalarLookupMap<T, (), SZ, LTSZ, CM>,
36}
37
38impl<T, const SZ: usize, const LTSZ: usize, CM> InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
39where
40    CM: CollectionMagnitude,
41{
42    /// Creates a frozen set.
43    #[must_use]
44    pub const fn new(map: InlineSparseScalarLookupMap<T, (), SZ, LTSZ, CM>) -> Self {
45        Self { map }
46    }
47
48    sparse_scalar_lookup_primary_funcs!();
49    common_primary_funcs!(const_len);
50}
51
52impl<T, Q, const SZ: usize, const LTSZ: usize, CM> Set<T, Q> for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
53where
54    CM: CollectionMagnitude,
55    Q: Comparable<T> + Scalar,
56{
57}
58
59impl<T, Q, const SZ: usize, const LTSZ: usize, CM> SetExtras<T, Q> for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
60where
61    CM: CollectionMagnitude,
62    Q: Scalar + Comparable<T>,
63{
64    set_extras_trait_funcs!();
65}
66
67impl<T, Q, const SZ: usize, const LTSZ: usize, CM> SetQuery<Q> for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
68where
69    CM: CollectionMagnitude,
70    Q: Scalar + Comparable<T>,
71{
72    set_query_trait_funcs!();
73}
74
75impl<T, const SZ: usize, const LTSZ: usize, CM> SetIteration<T> for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
76where
77    CM: CollectionMagnitude,
78{
79    type Iterator<'a>
80        = Iter<'a, T>
81    where
82        T: 'a,
83        CM: 'a;
84
85    set_iteration_trait_funcs!();
86}
87
88impl<T, const SZ: usize, const LTSZ: usize, CM> Len for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
89where
90    CM: CollectionMagnitude,
91{
92    len_trait_funcs!();
93}
94
95impl<T, ST, const SZ: usize, const LTSZ: usize, CM> BitOr<&ST> for &InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
96where
97    T: Scalar + Hash,
98    ST: Set<T>,
99    CM: CollectionMagnitude,
100{
101    bitor_trait_funcs!();
102}
103
104impl<T, ST, const SZ: usize, const LTSZ: usize, CM> BitAnd<&ST> for &InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
105where
106    T: Scalar + Hash,
107    ST: Set<T>,
108    CM: CollectionMagnitude,
109{
110    bitand_trait_funcs!();
111}
112
113impl<T, ST, const SZ: usize, const LTSZ: usize, CM> BitXor<&ST> for &InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
114where
115    T: Scalar + Hash,
116    ST: Set<T>,
117    CM: CollectionMagnitude,
118{
119    bitxor_trait_funcs!();
120}
121
122impl<T, ST, const SZ: usize, const LTSZ: usize, CM> Sub<&ST> for &InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
123where
124    T: Scalar + Hash,
125    ST: Set<T>,
126    CM: CollectionMagnitude,
127{
128    sub_trait_funcs!();
129}
130
131impl<T, const SZ: usize, const LTSZ: usize, CM> IntoIterator for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
132where
133    CM: CollectionMagnitude,
134{
135    into_iterator_trait_funcs!();
136}
137
138impl<'a, T, const SZ: usize, const LTSZ: usize, CM> IntoIterator for &'a InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
139where
140    CM: CollectionMagnitude,
141{
142    into_iterator_ref_trait_funcs!();
143}
144
145impl<T, ST, const SZ: usize, const LTSZ: usize, CM> PartialEq<ST> for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
146where
147    ST: SetQuery<T>,
148    CM: CollectionMagnitude,
149{
150    partial_eq_trait_funcs!();
151}
152
153impl<T, const SZ: usize, const LTSZ: usize, CM> Eq for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
154where
155    T: Scalar,
156    CM: CollectionMagnitude,
157{
158}
159
160impl<T, const SZ: usize, const LTSZ: usize, CM> Debug for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
161where
162    T: Debug,
163    CM: CollectionMagnitude,
164{
165    debug_trait_funcs!();
166}
167
168#[cfg(feature = "serde")]
169impl<T, const SZ: usize, const LTSZ: usize, CM> Serialize for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
170where
171    T: Serialize,
172    CM: CollectionMagnitude,
173{
174    serialize_trait_funcs!();
175}