diff options
| author | bors <bors@rust-lang.org> | 2014-11-18 01:02:19 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-11-18 01:02:19 +0000 |
| commit | 9c96a79a74f10bed18b031ce0ac4126c56d6cfb3 (patch) | |
| tree | 42a980b8b8b145b37aae79c28c7540f8a7eec8d0 /src/libsyntax/util | |
| parent | 336349c93207d792587eb0b5258b29da6ec0db8a (diff) | |
| parent | 330a1afae84c7bea583907e5b1f02448a4c7bc20 (diff) | |
| download | rust-9c96a79a74f10bed18b031ce0ac4126c56d6cfb3.tar.gz rust-9c96a79a74f10bed18b031ce0ac4126c56d6cfb3.zip | |
auto merge of #19049 : jakub-/rust/roll-up, r=alexcrichton
r? @alexcrichton
Diffstat (limited to 'src/libsyntax/util')
| -rw-r--r-- | src/libsyntax/util/interner.rs | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/src/libsyntax/util/interner.rs b/src/libsyntax/util/interner.rs index 08ada3e4435..ede967bba25 100644 --- a/src/libsyntax/util/interner.rs +++ b/src/libsyntax/util/interner.rs @@ -14,9 +14,9 @@ use ast::Name; +use std::borrow::BorrowFrom; use std::collections::HashMap; use std::cell::RefCell; -use std::cmp::Equiv; use std::fmt; use std::hash::Hash; use std::rc::Rc; @@ -75,9 +75,10 @@ impl<T: Eq + Hash + Clone + 'static> Interner<T> { (*vect).len() } - pub fn find_equiv<Sized? Q: Hash + Equiv<T>>(&self, val: &Q) -> Option<Name> { + pub fn find<Sized? Q>(&self, val: &Q) -> Option<Name> + where Q: BorrowFrom<T> + Eq + Hash { let map = self.map.borrow(); - match (*map).find_equiv(val) { + match (*map).get(val) { Some(v) => Some(*v), None => None, } @@ -117,6 +118,12 @@ impl fmt::Show for RcStr { } } +impl BorrowFrom<RcStr> for str { + fn borrow_from(owned: &RcStr) -> &str { + owned.string.as_slice() + } +} + impl RcStr { pub fn new(string: &str) -> RcStr { RcStr { @@ -149,7 +156,7 @@ impl StrInterner { pub fn intern(&self, val: &str) -> Name { let mut map = self.map.borrow_mut(); - match map.find_equiv(val) { + match map.get(val) { Some(&idx) => return idx, None => (), } @@ -195,8 +202,9 @@ impl StrInterner { self.vect.borrow().len() } - pub fn find_equiv<Sized? Q:Hash + Equiv<RcStr>>(&self, val: &Q) -> Option<Name> { - match (*self.map.borrow()).find_equiv(val) { + pub fn find<Sized? Q>(&self, val: &Q) -> Option<Name> + where Q: BorrowFrom<RcStr> + Eq + Hash { + match (*self.map.borrow()).get(val) { Some(v) => Some(*v), None => None, } |
