]>
git.proxmox.com Git - rustc.git/blob - vendor/clap_builder-4.3.10/src/util/flat_set.rs
3 use std
::borrow
::Borrow
;
5 /// Flat (Vec) backed set
7 /// This preserves insertion order
8 #[derive(Clone, Debug, PartialEq, Eq)]
9 pub(crate) struct FlatSet
<T
> {
13 impl<T
: PartialEq
+ Eq
> FlatSet
<T
> {
14 pub(crate) fn new() -> Self {
18 pub(crate) fn insert(&mut self, value
: T
) -> bool
{
19 for existing
in &self.inner
{
20 if *existing
== value
{
24 self.inner
.push(value
);
28 pub fn contains
<Q
: ?Sized
>(&self, value
: &Q
) -> bool
33 for existing
in &self.inner
{
34 if existing
.borrow() == value
{
41 pub fn retain
<F
>(&mut self, f
: F
)
48 pub(crate) fn is_empty(&self) -> bool
{
52 pub(crate) fn iter(&self) -> std
::slice
::Iter
<'_
, T
> {
56 pub fn sort_by_key
<K
, F
>(&mut self, f
: F
)
61 self.inner
.sort_by_key(f
);
65 impl<T
: PartialEq
+ Eq
> Default
for FlatSet
<T
> {
66 fn default() -> Self {
68 inner
: Default
::default(),
73 impl<T
: PartialEq
+ Eq
> IntoIterator
for FlatSet
<T
> {
75 type IntoIter
= std
::vec
::IntoIter
<T
>;
77 fn into_iter(self) -> Self::IntoIter
{
78 self.inner
.into_iter()
82 impl<'s
, T
: PartialEq
+ Eq
> IntoIterator
for &'s FlatSet
<T
> {
84 type IntoIter
= std
::slice
::Iter
<'s
, T
>;
86 fn into_iter(self) -> Self::IntoIter
{
91 impl<T
: PartialEq
+ Eq
> Extend
<T
> for FlatSet
<T
> {
92 fn extend
<I
: IntoIterator
<Item
= T
>>(&mut self, iter
: I
) {
99 impl<T
: PartialEq
+ Eq
> FromIterator
<T
> for FlatSet
<T
> {
100 fn from_iter
<I
: IntoIterator
<Item
= T
>>(iter
: I
) -> Self {
101 let mut set
= Self::new();