frozen_collections_core/inline_sets/
inline_sparse_scalar_lookup_set.rs

1use crate::inline_maps::InlineSparseScalarLookupMap;
2use crate::sets::decl_macros::{
3    bitand_fn, bitor_fn, bitxor_fn, debug_fn, get_fn, into_iter_fn, into_iter_ref_fn,
4    partial_eq_fn, set_iteration_funcs, sub_fn,
5};
6use crate::sets::{IntoIter, Iter};
7use crate::traits::{
8    CollectionMagnitude, Len, MapIteration, MapQuery, Scalar, Set, SetIteration, SetOps, SetQuery,
9    SmallCollection,
10};
11use core::fmt::Debug;
12use core::hash::Hash;
13use core::ops::{BitAnd, BitOr, BitXor, Sub};
14
15#[cfg(feature = "serde")]
16use {
17    crate::sets::decl_macros::serialize_fn,
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{
36    map: InlineSparseScalarLookupMap<T, (), SZ, LTSZ, CM>,
37}
38
39impl<T, const SZ: usize, const LTSZ: usize, CM> InlineSparseScalarLookupSet<T, SZ, LTSZ, CM> {
40    /// Creates a frozen set.
41    #[must_use]
42    pub const fn new(map: InlineSparseScalarLookupMap<T, (), SZ, LTSZ, CM>) -> Self {
43        Self { map }
44    }
45}
46
47impl<T, const SZ: usize, const LTSZ: usize, CM> Set<T, T>
48    for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
49where
50    CM: CollectionMagnitude,
51    T: Scalar,
52{
53}
54
55impl<T, const SZ: usize, const LTSZ: usize, CM> SetQuery<T, T>
56    for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
57where
58    CM: CollectionMagnitude,
59    T: Scalar,
60{
61    get_fn!("Scalar");
62}
63
64impl<T, const SZ: usize, const LTSZ: usize, CM> SetIteration<T>
65    for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
66{
67    type Iterator<'a>
68        = Iter<'a, T>
69    where
70        T: 'a,
71        CM: 'a;
72
73    set_iteration_funcs!();
74}
75
76impl<T, const SZ: usize, const LTSZ: usize, CM> Len
77    for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
78{
79    fn len(&self) -> usize {
80        SZ
81    }
82}
83
84impl<T, ST, const SZ: usize, const LTSZ: usize, CM> BitOr<&ST>
85    for &InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
86where
87    T: Scalar + Hash,
88    ST: Set<T>,
89    CM: CollectionMagnitude,
90{
91    bitor_fn!();
92}
93
94impl<T, ST, const SZ: usize, const LTSZ: usize, CM> BitAnd<&ST>
95    for &InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
96where
97    T: Scalar + Hash,
98    ST: Set<T>,
99    CM: CollectionMagnitude,
100{
101    bitand_fn!();
102}
103
104impl<T, ST, const SZ: usize, const LTSZ: usize, CM> BitXor<&ST>
105    for &InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
106where
107    T: Scalar + Hash,
108    ST: Set<T>,
109    CM: CollectionMagnitude,
110{
111    bitxor_fn!();
112}
113
114impl<T, ST, const SZ: usize, const LTSZ: usize, CM> Sub<&ST>
115    for &InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
116where
117    T: Scalar + Hash,
118    ST: Set<T>,
119    CM: CollectionMagnitude,
120{
121    sub_fn!();
122}
123
124impl<T, const SZ: usize, const LTSZ: usize, CM> IntoIterator
125    for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
126{
127    into_iter_fn!();
128}
129
130impl<'a, T, const SZ: usize, const LTSZ: usize, CM> IntoIterator
131    for &'a InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
132{
133    into_iter_ref_fn!();
134}
135
136impl<T, ST, const SZ: usize, const LTSZ: usize, CM> PartialEq<ST>
137    for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
138where
139    T: Scalar,
140    ST: Set<T>,
141    CM: CollectionMagnitude,
142{
143    partial_eq_fn!();
144}
145
146impl<T, const SZ: usize, const LTSZ: usize, CM> Eq for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
147where
148    T: Scalar,
149    CM: CollectionMagnitude,
150{
151}
152
153impl<T, const SZ: usize, const LTSZ: usize, CM> Debug
154    for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
155where
156    T: Debug,
157{
158    debug_fn!();
159}
160
161#[cfg(feature = "serde")]
162impl<T, const SZ: usize, const LTSZ: usize, CM> Serialize
163    for InlineSparseScalarLookupSet<T, SZ, LTSZ, CM>
164where
165    T: Serialize,
166{
167    serialize_fn!();
168}