@@ -520,15 +520,15 @@ impl[T] Queue[T] {
520
520
}
521
521
}
522
522
523
- @pub class HashMap[K: Hash + Equals, V] {
523
+ @pub class HashMap[K: Hash + Identity + Equals, V] {
524
524
inserted_and_deleted: BitSet,
525
525
keys: Array[K],
526
526
values: Array[V],
527
527
entries: Int64,
528
528
cap: Int64,
529
529
}
530
530
531
- impl[K: Hash + Equals, V] HashMap[K, V] {
531
+ impl[K: Hash + Identity + Equals, V] HashMap[K, V] {
532
532
@pub @static fun new(entries: (K, V)...): HashMap[K, V] {
533
533
// BitSet.size == capacity * 2
534
534
// [bit 0: inserted; bit 1: deleted] * capacity
@@ -561,7 +561,7 @@ impl[K: Hash + Equals, V] HashMap[K, V] {
561
561
... .isLive(idx) {
562
562
let current_key = self.keys.get(idx);
563
563
564
- if current_key.hash() == hash && current_key.equals(key) {
564
+ if current_key.hash() == hash && ( current_key.identicalTo(key) || current_key. equals(key) ) {
565
565
let old_value = self.values.get(idx);
566
566
self.values.set(idx, value);
567
567
return Some[V](old_value);
@@ -607,7 +607,7 @@ impl[K: Hash + Equals, V] HashMap[K, V] {
607
607
... .isLive(idx) {
608
608
let current_key = self.keys.get(idx);
609
609
610
- if current_key.hash() == hash && current_key.equals(key) {
610
+ if current_key.hash() == hash && ( current_key.identicalTo(key) || current_key. equals(key) ) {
611
611
return true;
612
612
}
613
613
idx = (idx + 1i64) & (self.cap - 1i64);
@@ -639,7 +639,7 @@ impl[K: Hash + Equals, V] HashMap[K, V] {
639
639
... .isLive(idx) {
640
640
let current_key = self.keys.get(idx);
641
641
642
- if current_key.hash() == hash && current_key.equals(key) {
642
+ if current_key.hash() == hash && ( current_key.identicalTo(key) || current_key. equals(key) ) {
643
643
return Option[V]::Some(self.values.get(idx));
644
644
}
645
645
idx = (idx + 1i64) & (self.cap - 1i64);
@@ -667,7 +667,7 @@ impl[K: Hash + Equals, V] HashMap[K, V] {
667
667
... .isLive(idx) {
668
668
let current_key = self.keys.get(idx);
669
669
670
- if current_key.hash() == hash && current_key.equals(key) {
670
+ if current_key.hash() == hash && ( current_key.identicalTo(key) || current_key. equals(key) ) {
671
671
let value = self.values.get(idx);
672
672
self.inserted_and_deleted.insert(2i64 * idx + 1i64);
673
673
@@ -780,12 +780,12 @@ impl[K: Hash + Equals, V] HashMap[K, V] {
780
780
@pub fun iterator(): HashMapIterator[K, V] = HashMapIterator[K, V]::new(self);
781
781
}
782
782
783
- @pub class HashMapIterator[K: Hash + Equals, V] {
783
+ @pub class HashMapIterator[K: Hash + Identity + Equals, V] {
784
784
map: HashMap[K, V],
785
785
idx: Int64,
786
786
}
787
787
788
- impl[K: Hash + Equals, V] HashMapIterator[K, V] {
788
+ impl[K: Hash + Identity + Equals, V] HashMapIterator[K, V] {
789
789
@pub @static fun new(map: HashMap[K, V]): HashMapIterator[K, V] = HashMapIterator[K, V](map, 0);
790
790
791
791
@pub fun next(): Option[(K, V)] {
@@ -804,11 +804,11 @@ impl[K: Hash + Equals, V] HashMapIterator[K, V] {
804
804
}
805
805
}
806
806
807
- @pub class HashSet[K: Hash + Equals] {
807
+ @pub class HashSet[K: Hash + Identity + Equals] {
808
808
map: HashMap[K, ()],
809
809
}
810
810
811
- impl[K: Hash + Equals] HashSet[K] {
811
+ impl[K: Hash + Identity + Equals] HashSet[K] {
812
812
@pub @static fun new(keys: K...): HashSet[K] {
813
813
let map: HashMap[K, ()] = HashMap[K, ()]::new();
814
814
0 commit comments