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#[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 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 #[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}