Introduce a visibility boundary inside of set module
In preparation for adding an UnorderedSet.
diff --git a/syntax/set.rs b/syntax/set.rs
index 73e3909..ee490e9 100644
--- a/syntax/set.rs
+++ b/syntax/set.rs
@@ -1,55 +1,61 @@
-use std::borrow::Borrow;
-use std::collections::HashSet;
use std::fmt::{self, Debug};
-use std::hash::Hash;
use std::slice;
-pub struct OrderedSet<T> {
- set: HashSet<T>,
- vec: Vec<T>,
-}
+pub use self::ordered::OrderedSet;
-impl<'a, T> OrderedSet<&'a T>
-where
- T: Hash + Eq,
-{
- pub fn new() -> Self {
- OrderedSet {
- set: HashSet::new(),
- vec: Vec::new(),
+mod ordered {
+ use super::Iter;
+ use std::borrow::Borrow;
+ use std::collections::HashSet;
+ use std::hash::Hash;
+
+ pub struct OrderedSet<T> {
+ set: HashSet<T>,
+ vec: Vec<T>,
+ }
+
+ impl<'a, T> OrderedSet<&'a T>
+ where
+ T: Hash + Eq,
+ {
+ pub fn new() -> Self {
+ OrderedSet {
+ set: HashSet::new(),
+ vec: Vec::new(),
+ }
+ }
+
+ pub fn insert(&mut self, value: &'a T) -> bool {
+ let new = self.set.insert(value);
+ if new {
+ self.vec.push(value);
+ }
+ new
+ }
+
+ pub fn contains<Q>(&self, value: &Q) -> bool
+ where
+ &'a T: Borrow<Q>,
+ Q: ?Sized + Hash + Eq,
+ {
+ self.set.contains(value)
+ }
+
+ pub fn get<Q>(&self, value: &Q) -> Option<&'a T>
+ where
+ &'a T: Borrow<Q>,
+ Q: ?Sized + Hash + Eq,
+ {
+ self.set.get(value).copied()
}
}
- pub fn insert(&mut self, value: &'a T) -> bool {
- let new = self.set.insert(value);
- if new {
- self.vec.push(value);
+ impl<'s, 'a, T> IntoIterator for &'s OrderedSet<&'a T> {
+ type Item = &'a T;
+ type IntoIter = Iter<'s, 'a, T>;
+ fn into_iter(self) -> Self::IntoIter {
+ Iter(self.vec.iter())
}
- new
- }
-
- pub fn contains<Q>(&self, value: &Q) -> bool
- where
- &'a T: Borrow<Q>,
- Q: ?Sized + Hash + Eq,
- {
- self.set.contains(value)
- }
-
- pub fn get<Q>(&self, value: &Q) -> Option<&'a T>
- where
- &'a T: Borrow<Q>,
- Q: ?Sized + Hash + Eq,
- {
- self.set.get(value).copied()
- }
-}
-
-impl<'s, 'a, T> IntoIterator for &'s OrderedSet<&'a T> {
- type Item = &'a T;
- type IntoIter = Iter<'s, 'a, T>;
- fn into_iter(self) -> Self::IntoIter {
- Iter(self.vec.iter())
}
}