12
12
13
13
use std:: container:: { Container , Mutable , Map , MutableMap , Set , MutableSet } ;
14
14
use std:: clone:: Clone ;
15
- use std:: cmp:: { Eq , TotalEq , Equiv , max} ;
15
+ use std:: cmp:: { Eq , Equiv , max} ;
16
16
use std:: default:: Default ;
17
17
use std:: fmt;
18
18
use std:: fmt:: Show ;
@@ -140,7 +140,6 @@ mod table {
140
140
}
141
141
142
142
/// A hash that is not zero, since we use that to represent empty buckets.
143
- #[ deriving( Eq ) ]
144
143
pub struct SafeHash {
145
144
priv hash : u64 ,
146
145
}
@@ -150,6 +149,10 @@ mod table {
150
149
pub fn inspect ( & self ) -> u64 { self . hash }
151
150
}
152
151
152
+ impl Eq for SafeHash {
153
+ fn eq ( & self , other : & SafeHash ) -> bool { self . hash == other. hash }
154
+ }
155
+
153
156
/// We need to remove hashes of 0. That's reserved for empty buckets.
154
157
/// This function wraps up `hash_keyed` to be the only way outside this
155
158
/// module to generate a SafeHash.
@@ -695,7 +698,7 @@ fn grow_at(capacity: uint, load_factor: Fraction) -> uint {
695
698
fraction_mul ( capacity, load_factor)
696
699
}
697
700
698
- impl < K : TotalEq + Hash < S > , V , S , H : Hasher < S > > HashMap < K , V , H > {
701
+ impl < K : Eq + Hash < S > , V , S , H : Hasher < S > > HashMap < K , V , H > {
699
702
/// Get the number of elements which will force the capacity to shrink.
700
703
/// When size == self.shrink_at(), we halve the capacity.
701
704
fn shrink_at ( & self ) -> uint {
@@ -796,12 +799,12 @@ impl<K: TotalEq + Hash<S>, V, S, H: Hasher<S>> HashMap<K, V, H> {
796
799
}
797
800
}
798
801
799
- impl < K : TotalEq + Hash < S > , V , S , H : Hasher < S > > Container for HashMap < K , V , H > {
802
+ impl < K : Eq + Hash < S > , V , S , H : Hasher < S > > Container for HashMap < K , V , H > {
800
803
/// Return the number of elements in the map
801
804
fn len ( & self ) -> uint { self . table . size ( ) }
802
805
}
803
806
804
- impl < K : TotalEq + Hash < S > , V , S , H : Hasher < S > > Mutable for HashMap < K , V , H > {
807
+ impl < K : Eq + Hash < S > , V , S , H : Hasher < S > > Mutable for HashMap < K , V , H > {
805
808
/// Clear the map, removing all key-value pairs.
806
809
fn clear ( & mut self ) {
807
810
self . minimum_capacity = self . table . size ( ) ;
@@ -816,7 +819,7 @@ impl<K: TotalEq + Hash<S>, V, S, H: Hasher<S>> Mutable for HashMap<K, V, H> {
816
819
}
817
820
818
821
819
- impl < K : TotalEq + Hash < S > , V , S , H : Hasher < S > > Map < K , V > for HashMap < K , V , H > {
822
+ impl < K : Eq + Hash < S > , V , S , H : Hasher < S > > Map < K , V > for HashMap < K , V , H > {
820
823
fn find < ' a > ( & ' a self , k : & K ) -> Option < & ' a V > {
821
824
self . search ( k) . map ( |idx| {
822
825
let ( _, v) = self . table . read ( & idx) ;
@@ -829,7 +832,7 @@ impl<K: TotalEq + Hash<S>, V, S, H: Hasher<S>> Map<K, V> for HashMap<K, V, H> {
829
832
}
830
833
}
831
834
832
- impl < K : TotalEq + Hash < S > , V , S , H : Hasher < S > > MutableMap < K , V > for HashMap < K , V , H > {
835
+ impl < K : Eq + Hash < S > , V , S , H : Hasher < S > > MutableMap < K , V > for HashMap < K , V , H > {
833
836
fn find_mut < ' a > ( & ' a mut self , k : & K ) -> Option < & ' a mut V > {
834
837
match self . search ( k) {
835
838
None => None ,
@@ -966,7 +969,7 @@ impl<K: TotalEq + Hash<S>, V, S, H: Hasher<S>> MutableMap<K, V> for HashMap<K, V
966
969
}
967
970
}
968
971
969
- impl < K : Hash + TotalEq , V > HashMap < K , V , sip:: SipHasher > {
972
+ impl < K : Hash + Eq , V > HashMap < K , V , sip:: SipHasher > {
970
973
/// Create an empty HashMap.
971
974
pub fn new ( ) -> HashMap < K , V , sip:: SipHasher > {
972
975
HashMap :: with_capacity ( INITIAL_CAPACITY )
@@ -981,7 +984,7 @@ impl<K: Hash + TotalEq, V> HashMap<K, V, sip::SipHasher> {
981
984
}
982
985
}
983
986
984
- impl < K : TotalEq + Hash < S > , V , S , H : Hasher < S > > HashMap < K , V , H > {
987
+ impl < K : Eq + Hash < S > , V , S , H : Hasher < S > > HashMap < K , V , H > {
985
988
pub fn with_hasher ( hasher : H ) -> HashMap < K , V , H > {
986
989
HashMap :: with_capacity_and_hasher ( INITIAL_CAPACITY , hasher)
987
990
}
@@ -1293,7 +1296,7 @@ impl<K: TotalEq + Hash<S>, V, S, H: Hasher<S>> HashMap<K, V, H> {
1293
1296
}
1294
1297
}
1295
1298
1296
- impl < K : TotalEq + Hash < S > , V : Clone , S , H : Hasher < S > > HashMap < K , V , H > {
1299
+ impl < K : Eq + Hash < S > , V : Clone , S , H : Hasher < S > > HashMap < K , V , H > {
1297
1300
/// Like `find`, but returns a copy of the value.
1298
1301
pub fn find_copy ( & self , k : & K ) -> Option < V > {
1299
1302
self . find ( k) . map ( |v| ( * v) . clone ( ) )
@@ -1305,7 +1308,7 @@ impl<K: TotalEq + Hash<S>, V: Clone, S, H: Hasher<S>> HashMap<K, V, H> {
1305
1308
}
1306
1309
}
1307
1310
1308
- impl < K : TotalEq + Hash < S > , V : Eq , S , H : Hasher < S > > Eq for HashMap < K , V , H > {
1311
+ impl < K : Eq + Hash < S > , V : Eq , S , H : Hasher < S > > Eq for HashMap < K , V , H > {
1309
1312
fn eq ( & self , other : & HashMap < K , V , H > ) -> bool {
1310
1313
if self . len ( ) != other. len ( ) { return false ; }
1311
1314
@@ -1318,7 +1321,7 @@ impl<K: TotalEq + Hash<S>, V: Eq, S, H: Hasher<S>> Eq for HashMap<K, V, H> {
1318
1321
}
1319
1322
}
1320
1323
1321
- impl < K : TotalEq + Hash < S > + Show , V : Show , S , H : Hasher < S > > Show for HashMap < K , V , H > {
1324
+ impl < K : Eq + Hash < S > + Show , V : Show , S , H : Hasher < S > > Show for HashMap < K , V , H > {
1322
1325
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
1323
1326
try!( write ! ( f. buf, r"\{" ) ) ;
1324
1327
@@ -1331,7 +1334,7 @@ impl<K: TotalEq + Hash<S> + Show, V: Show, S, H: Hasher<S>> Show for HashMap<K,
1331
1334
}
1332
1335
}
1333
1336
1334
- impl < K : TotalEq + Hash < S > , V , S , H : Hasher < S > + Default > Default for HashMap < K , V , H > {
1337
+ impl < K : Eq + Hash < S > , V , S , H : Hasher < S > + Default > Default for HashMap < K , V , H > {
1335
1338
fn default ( ) -> HashMap < K , V , H > {
1336
1339
HashMap :: with_capacity_and_hasher ( INITIAL_CAPACITY , Default :: default ( ) )
1337
1340
}
@@ -1355,7 +1358,7 @@ pub type Keys<'a, K, V> =
1355
1358
pub type Values < ' a , K , V > =
1356
1359
iter:: Map < ' static , ( & ' a K , & ' a V ) , & ' a V , Entries < ' a , K , V > > ;
1357
1360
1358
- impl < K : TotalEq + Hash < S > , V , S , H : Hasher < S > + Default > FromIterator < ( K , V ) > for HashMap < K , V , H > {
1361
+ impl < K : Eq + Hash < S > , V , S , H : Hasher < S > + Default > FromIterator < ( K , V ) > for HashMap < K , V , H > {
1359
1362
fn from_iterator < T : Iterator < ( K , V ) > > ( iter : & mut T ) -> HashMap < K , V , H > {
1360
1363
let ( lower, _) = iter. size_hint ( ) ;
1361
1364
let mut map = HashMap :: with_capacity_and_hasher ( lower, Default :: default ( ) ) ;
@@ -1364,7 +1367,7 @@ impl<K: TotalEq + Hash<S>, V, S, H: Hasher<S> + Default> FromIterator<(K, V)> fo
1364
1367
}
1365
1368
}
1366
1369
1367
- impl < K : TotalEq + Hash < S > , V , S , H : Hasher < S > + Default > Extendable < ( K , V ) > for HashMap < K , V , H > {
1370
+ impl < K : Eq + Hash < S > , V , S , H : Hasher < S > + Default > Extendable < ( K , V ) > for HashMap < K , V , H > {
1368
1371
fn extend < T : Iterator < ( K , V ) > > ( & mut self , iter : & mut T ) {
1369
1372
for ( k, v) in * iter {
1370
1373
self . insert ( k, v) ;
@@ -1388,7 +1391,7 @@ pub struct HashSet<T, H = sip::SipHasher> {
1388
1391
priv map: HashMap < T , ( ) , H >
1389
1392
}
1390
1393
1391
- impl < T : TotalEq + Hash < S > , S , H : Hasher < S > > Eq for HashSet < T , H > {
1394
+ impl < T : Eq + Hash < S > , S , H : Hasher < S > > Eq for HashSet < T , H > {
1392
1395
// FIXME #11998: Since the value is a (), and `find` returns a Some(&()),
1393
1396
// we trigger #11998 when matching on it. I've fallen back to manual
1394
1397
// iteration until this is fixed.
@@ -1399,17 +1402,17 @@ impl<T: TotalEq + Hash<S>, S, H: Hasher<S>> Eq for HashSet<T, H> {
1399
1402
}
1400
1403
}
1401
1404
1402
- impl < T : TotalEq + Hash < S > , S , H : Hasher < S > > Container for HashSet < T , H > {
1405
+ impl < T : Eq + Hash < S > , S , H : Hasher < S > > Container for HashSet < T , H > {
1403
1406
/// Return the number of elements in the set
1404
1407
fn len ( & self ) -> uint { self . map . len ( ) }
1405
1408
}
1406
1409
1407
- impl < T : TotalEq + Hash < S > , S , H : Hasher < S > > Mutable for HashSet < T , H > {
1410
+ impl < T : Eq + Hash < S > , S , H : Hasher < S > > Mutable for HashSet < T , H > {
1408
1411
/// Clear the set, removing all values.
1409
1412
fn clear ( & mut self ) { self . map . clear ( ) }
1410
1413
}
1411
1414
1412
- impl < T : TotalEq + Hash < S > , S , H : Hasher < S > > Set < T > for HashSet < T , H > {
1415
+ impl < T : Eq + Hash < S > , S , H : Hasher < S > > Set < T > for HashSet < T , H > {
1413
1416
/// Return true if the set contains a value
1414
1417
fn contains ( & self , value : & T ) -> bool { self . map . search ( value) . is_some ( ) }
1415
1418
@@ -1430,7 +1433,7 @@ impl<T: TotalEq + Hash<S>, S, H: Hasher<S>> Set<T> for HashSet<T, H> {
1430
1433
}
1431
1434
}
1432
1435
1433
- impl < T : TotalEq + Hash < S > , S , H : Hasher < S > > MutableSet < T > for HashSet < T , H > {
1436
+ impl < T : Eq + Hash < S > , S , H : Hasher < S > > MutableSet < T > for HashSet < T , H > {
1434
1437
/// Add a value to the set. Return true if the value was not already
1435
1438
/// present in the set.
1436
1439
fn insert ( & mut self , value : T ) -> bool { self . map . insert ( value, ( ) ) }
@@ -1440,7 +1443,7 @@ impl<T: TotalEq + Hash<S>, S, H: Hasher<S>> MutableSet<T> for HashSet<T, H> {
1440
1443
fn remove ( & mut self , value : & T ) -> bool { self . map . remove ( value) }
1441
1444
}
1442
1445
1443
- impl < T : Hash + TotalEq > HashSet < T , sip:: SipHasher > {
1446
+ impl < T : Hash + Eq > HashSet < T , sip:: SipHasher > {
1444
1447
/// Create an empty HashSet
1445
1448
pub fn new ( ) -> HashSet < T , sip:: SipHasher > {
1446
1449
HashSet :: with_capacity ( INITIAL_CAPACITY )
@@ -1453,7 +1456,7 @@ impl<T: Hash + TotalEq> HashSet<T, sip::SipHasher> {
1453
1456
}
1454
1457
}
1455
1458
1456
- impl < T : TotalEq + Hash < S > , S , H : Hasher < S > > HashSet < T , H > {
1459
+ impl < T : Eq + Hash < S > , S , H : Hasher < S > > HashSet < T , H > {
1457
1460
pub fn with_hasher ( hasher : H ) -> HashSet < T , H > {
1458
1461
HashSet :: with_capacity_and_hasher ( INITIAL_CAPACITY , hasher)
1459
1462
}
@@ -1526,7 +1529,7 @@ impl<T: TotalEq + Hash<S>, S, H: Hasher<S>> HashSet<T, H> {
1526
1529
1527
1530
}
1528
1531
1529
- impl < T : TotalEq + Hash < S > + fmt:: Show , S , H : Hasher < S > > fmt:: Show for HashSet < T , H > {
1532
+ impl < T : Eq + Hash < S > + fmt:: Show , S , H : Hasher < S > > fmt:: Show for HashSet < T , H > {
1530
1533
fn fmt ( & self , f : & mut fmt:: Formatter ) -> fmt:: Result {
1531
1534
try!( write ! ( f. buf, r"\{" ) ) ;
1532
1535
@@ -1539,7 +1542,7 @@ impl<T: TotalEq + Hash<S> + fmt::Show, S, H: Hasher<S>> fmt::Show for HashSet<T,
1539
1542
}
1540
1543
}
1541
1544
1542
- impl < T : TotalEq + Hash < S > , S , H : Hasher < S > + Default > FromIterator < T > for HashSet < T , H > {
1545
+ impl < T : Eq + Hash < S > , S , H : Hasher < S > + Default > FromIterator < T > for HashSet < T , H > {
1543
1546
fn from_iterator < I : Iterator < T > > ( iter : & mut I ) -> HashSet < T , H > {
1544
1547
let ( lower, _) = iter. size_hint ( ) ;
1545
1548
let mut set = HashSet :: with_capacity_and_hasher ( lower, Default :: default ( ) ) ;
@@ -1548,15 +1551,15 @@ impl<T: TotalEq + Hash<S>, S, H: Hasher<S> + Default> FromIterator<T> for HashSe
1548
1551
}
1549
1552
}
1550
1553
1551
- impl < T : TotalEq + Hash < S > , S , H : Hasher < S > + Default > Extendable < T > for HashSet < T , H > {
1554
+ impl < T : Eq + Hash < S > , S , H : Hasher < S > + Default > Extendable < T > for HashSet < T , H > {
1552
1555
fn extend < I : Iterator < T > > ( & mut self , iter : & mut I ) {
1553
1556
for k in * iter {
1554
1557
self . insert ( k) ;
1555
1558
}
1556
1559
}
1557
1560
}
1558
1561
1559
- impl < T : TotalEq + Hash > Default for HashSet < T , sip:: SipHasher > {
1562
+ impl < T : Eq + Hash > Default for HashSet < T , sip:: SipHasher > {
1560
1563
fn default ( ) -> HashSet < T > { HashSet :: new ( ) }
1561
1564
}
1562
1565
@@ -1598,7 +1601,7 @@ mod test_map {
1598
1601
1599
1602
local_data_key ! ( drop_vector: vec:: Vec <int>)
1600
1603
1601
- #[ deriving( Hash , Eq , TotalEq ) ]
1604
+ #[ deriving( Hash , Eq ) ]
1602
1605
struct Dropable {
1603
1606
k : int
1604
1607
}
0 commit comments