frozen_collections_core/inline_sets/
inline_eytzinger_search_set.rs

1use crate::inline_maps::InlineEytzingerSearchMap;
2use crate::sets::decl_macros::{
3    bitand_trait_funcs, bitor_trait_funcs, bitxor_trait_funcs, common_primary_funcs, debug_trait_funcs, eytzinger_search_primary_funcs,
4    into_iterator_ref_trait_funcs, into_iterator_trait_funcs, partial_eq_trait_funcs, set_extras_trait_funcs, set_iteration_trait_funcs,
5    set_query_trait_funcs, sub_trait_funcs,
6};
7use crate::sets::{IntoIter, Iter};
8use crate::traits::{Len, Set, SetExtras, SetIteration, SetOps, SetQuery};
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 general-purpose set implemented using Eytzinger search.
23///
24#[doc = include_str!("../doc_snippets/private_api_warning.md")]
25#[doc = include_str!("../doc_snippets/about.md")]
26#[doc = include_str!("../doc_snippets/ord_warning.md")]
27///
28/// # Type Parameters
29///
30/// - `T`: The value type.
31/// - `SZ`: The number of entries in the set.
32#[derive(Clone)]
33pub struct InlineEytzingerSearchSet<T, const SZ: usize> {
34    map: InlineEytzingerSearchMap<T, (), SZ>,
35}
36
37impl<T, const SZ: usize> InlineEytzingerSearchSet<T, SZ> {
38    /// Creates a frozen set.
39    #[must_use]
40    pub const fn new(map: InlineEytzingerSearchMap<T, (), SZ>) -> Self {
41        Self { map }
42    }
43
44    eytzinger_search_primary_funcs!();
45    common_primary_funcs!(const_len);
46}
47
48impl<T, Q, const SZ: usize> Set<T, Q> for InlineEytzingerSearchSet<T, SZ> where Q: ?Sized + Comparable<T> {}
49
50impl<T, Q, const SZ: usize> SetExtras<T, Q> for InlineEytzingerSearchSet<T, SZ>
51where
52    Q: ?Sized + Comparable<T>,
53{
54    set_extras_trait_funcs!();
55}
56
57impl<T, Q, const SZ: usize> SetQuery<Q> for InlineEytzingerSearchSet<T, SZ>
58where
59    Q: ?Sized + Comparable<T>,
60{
61    set_query_trait_funcs!();
62}
63
64impl<T, const SZ: usize> SetIteration<T> for InlineEytzingerSearchSet<T, SZ> {
65    type Iterator<'a>
66        = Iter<'a, T>
67    where
68        T: 'a;
69
70    set_iteration_trait_funcs!();
71}
72
73impl<T, const SZ: usize> Len for InlineEytzingerSearchSet<T, SZ> {
74    len_trait_funcs!();
75}
76
77impl<T, ST, const SZ: usize> BitOr<&ST> for &InlineEytzingerSearchSet<T, SZ>
78where
79    T: Hash + Ord + Clone,
80    ST: Set<T>,
81{
82    bitor_trait_funcs!();
83}
84
85impl<T, ST, const SZ: usize> BitAnd<&ST> for &InlineEytzingerSearchSet<T, SZ>
86where
87    T: Hash + Ord + Clone,
88    ST: Set<T>,
89{
90    bitand_trait_funcs!();
91}
92
93impl<T, ST, const SZ: usize> BitXor<&ST> for &InlineEytzingerSearchSet<T, SZ>
94where
95    T: Hash + Ord + Clone,
96    ST: Set<T>,
97{
98    bitxor_trait_funcs!();
99}
100
101impl<T, ST, const SZ: usize> Sub<&ST> for &InlineEytzingerSearchSet<T, SZ>
102where
103    T: Hash + Ord + Clone,
104    ST: Set<T>,
105{
106    sub_trait_funcs!();
107}
108
109impl<T, const SZ: usize> IntoIterator for InlineEytzingerSearchSet<T, SZ> {
110    into_iterator_trait_funcs!();
111}
112
113impl<'a, T, const SZ: usize> IntoIterator for &'a InlineEytzingerSearchSet<T, SZ> {
114    into_iterator_ref_trait_funcs!();
115}
116
117impl<T, ST, const SZ: usize> PartialEq<ST> for InlineEytzingerSearchSet<T, SZ>
118where
119    T: Ord,
120    ST: SetQuery<T>,
121{
122    partial_eq_trait_funcs!();
123}
124
125impl<T, const SZ: usize> Eq for InlineEytzingerSearchSet<T, SZ> where T: Ord {}
126
127impl<T, const SZ: usize> Debug for InlineEytzingerSearchSet<T, SZ>
128where
129    T: Debug,
130{
131    debug_trait_funcs!();
132}
133
134#[cfg(feature = "serde")]
135impl<T, const SZ: usize> Serialize for InlineEytzingerSearchSet<T, SZ>
136where
137    T: Serialize,
138{
139    serialize_trait_funcs!();
140}