]>
git.proxmox.com Git - rustc.git/blob - vendor/cxxbridge-macro/src/syntax/set.rs
1 use std
::fmt
::{self, Debug}
;
4 pub use self::ordered
::OrderedSet
;
5 pub use self::unordered
::UnorderedSet
;
8 use super::{Iter, UnorderedSet}
;
9 use std
::borrow
::Borrow
;
12 pub struct OrderedSet
<T
> {
17 impl<'a
, T
> OrderedSet
<&'a T
>
21 pub fn new() -> Self {
23 set
: UnorderedSet
::new(),
28 pub fn insert(&mut self, value
: &'a T
) -> bool
{
29 let new
= self.set
.insert(value
);
36 pub fn contains
<Q
>(&self, value
: &Q
) -> bool
39 Q
: ?Sized
+ Hash
+ Eq
,
41 self.set
.contains(value
)
44 pub fn get
<Q
>(&self, value
: &Q
) -> Option
<&'a T
>
47 Q
: ?Sized
+ Hash
+ Eq
,
49 self.set
.get(value
).copied()
53 impl<'a
, T
> OrderedSet
<&'a T
> {
54 pub fn is_empty(&self) -> bool
{
58 pub fn iter(&self) -> Iter
<'_
, 'a
, T
> {
63 impl<'s
, 'a
, T
> IntoIterator
for &'s OrderedSet
<&'a T
> {
65 type IntoIter
= Iter
<'s
, 'a
, T
>;
66 fn into_iter(self) -> Self::IntoIter
{
73 use std
::borrow
::Borrow
;
74 use std
::collections
::HashSet
;
77 // Wrapper prohibits accidentally introducing iteration over the set, which
78 // could lead to nondeterministic generated code.
79 pub struct UnorderedSet
<T
>(HashSet
<T
>);
81 impl<T
> UnorderedSet
<T
>
85 pub fn new() -> Self {
86 UnorderedSet(HashSet
::new())
89 pub fn insert(&mut self, value
: T
) -> bool
{
93 pub fn contains
<Q
>(&self, value
: &Q
) -> bool
96 Q
: ?Sized
+ Hash
+ Eq
,
98 self.0.contains(value
)
101 pub fn get
<Q
>(&self, value
: &Q
) -> Option
<&T
>
104 Q
: ?Sized
+ Hash
+ Eq
,
109 pub fn retain(&mut self, f
: impl FnMut(&T
) -> bool
) {
115 pub struct Iter
<'s
, 'a
, T
>(slice
::Iter
<'s
, &'a T
>);
117 impl<'s
, 'a
, T
> Iterator
for Iter
<'s
, 'a
, T
> {
120 fn next(&mut self) -> Option
<Self::Item
> {
121 self.0.next().copied()
124 fn size_hint(&self) -> (usize, Option
<usize>) {
129 impl<'a
, T
> Debug
for OrderedSet
<&'a T
>
133 fn fmt(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
134 formatter
.debug_set().entries(self).finish()