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#[doc = include_str!("../doc_snippets/private_api_warning.md")]
25#[doc = include_str!("../doc_snippets/about.md")]
26#[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 #[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}