Skip to content

Commit a1d6ade

Browse files
improve(bucketsyncmap): remove additional hash checks from fastutil implementation
1 parent 05947dd commit a1d6ade

File tree

1 file changed

+41
-45
lines changed

1 file changed

+41
-45
lines changed

collections-fastutil/src/main/java-templates/space/vectrix/sync/collections/fastutil/{{key}}2ObjectBucketSyncMap.java.peb

Lines changed: 41 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -405,12 +405,12 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
405405
final int hash = this.spreadFunction.spread(key);
406406

407407
if(length > 0 && (node = {{ key }}2ObjectBucketSyncMap.getNode(table, (length - 1) & hash)) != null) {
408-
if(node.hash == hash && node.key == key) {
408+
if(node.key == key) {
409409
return node.referencePlain().valueExists();
410410
}
411411

412412
while((node = node.nextPlain()) != null) {
413-
if(node.hash == hash && node.key == key) {
413+
if(node.key == key) {
414414
return node.referencePlain().valueExists();
415415
}
416416
}
@@ -419,13 +419,12 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
419419
if(this.amended && (table = this.mutableTable) != null && (length = table.length) > 0) {
420420
boolean exists = false;
421421
retry: if((node = {{ key }}2ObjectBucketSyncMap.getNode(table, (length - 1) & hash)) != null) {
422-
final int nodeHash;
423-
if((nodeHash = node.hash) == hash) {
422+
if(node.hash >= 0) {
424423
if(node.key == key) {
425424
exists = node.reference().valueExists();
426425
break retry;
427426
}
428-
} else if(nodeHash < 0) {
427+
} else {
429428
final Node nextNode;
430429
if((nextNode = node.find(hash, key)) != null) {
431430
exists = nextNode.reference().valueExists();
@@ -434,7 +433,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
434433
}
435434

436435
while((node = node.next()) != null) {
437-
if(node.hash == hash && node.key == key) {
436+
if(node.key == key) {
438437
exists = node.reference().valueExists();
439438
break retry;
440439
}
@@ -466,12 +465,12 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
466465
final int hash = this.spreadFunction.spread(key);
467466

468467
if(length > 0 && (node = {{ key }}2ObjectBucketSyncMap.getNode(table, (length - 1) & hash)) != null) {
469-
if(node.hash == hash && node.key == key) {
468+
if(node.key == key) {
470469
return node.referencePlain().value();
471470
}
472471

473472
while((node = node.nextPlain()) != null) {
474-
if(node.hash == hash && node.key == key) {
473+
if(node.key == key) {
475474
return node.referencePlain().value();
476475
}
477476
}
@@ -480,13 +479,12 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
480479
if(this.amended && (table = this.mutableTable) != null && (length = table.length) > 0) {
481480
V value = null;
482481
retry: if((node = {{ key }}2ObjectBucketSyncMap.getNode(table, (length - 1) & hash)) != null) {
483-
final int nodeHash;
484-
if((nodeHash = node.hash) == hash) {
482+
if(node.hash >= 0) {
485483
if(node.key == key) {
486484
value = node.reference().value();
487485
break retry;
488486
}
489-
} else if(nodeHash < 0) {
487+
} else {
490488
final Node nextNode;
491489
if((nextNode = node.find(hash, key)) != null) {
492490
value = nextNode.reference().value();
@@ -495,7 +493,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
495493
}
496494

497495
while((node = node.next()) != null) {
498-
if(node.hash == hash && node.key == key) {
496+
if(node.key == key) {
499497
value = node.reference().value();
500498
break retry;
501499
}
@@ -529,12 +527,12 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
529527
final int hash = this.spreadFunction.spread(key);
530528

531529
if(length > 0 && (node = {{ key }}2ObjectBucketSyncMap.getNode(table, (length - 1) & hash)) != null) {
532-
if(node.hash == hash && node.key == key) {
530+
if(node.key == key) {
533531
return node.referencePlain().valueOr(defaultValue);
534532
}
535533

536534
while((node = node.nextPlain()) != null) {
537-
if(node.hash == hash && node.key == key) {
535+
if(node.key == key) {
538536
return node.referencePlain().valueOr(defaultValue);
539537
}
540538
}
@@ -544,12 +542,12 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
544542
V value = defaultValue;
545543
retry: if((node = {{ key }}2ObjectBucketSyncMap.getNode(table, (length - 1) & hash)) != null) {
546544
final int nodeHash;
547-
if((nodeHash = node.hash) == hash) {
545+
if(node.hash >= 0) {
548546
if(node.key == key) {
549547
value = node.reference().valueOr(defaultValue);
550548
break retry;
551549
}
552-
} else if(nodeHash < 0) {
550+
} else {
553551
final Node nextNode;
554552
if((nextNode = node.find(hash, key)) != null) {
555553
value = nextNode.reference().valueOr(defaultValue);
@@ -558,7 +556,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
558556
}
559557

560558
while((node = node.next()) != null) {
561-
if(node.hash == hash && node.key == key) {
559+
if(node.key == key) {
562560
value = node.reference().valueOr(defaultValue);
563561
break retry;
564562
}
@@ -605,7 +603,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
605603
// node is present and the value is null or expunged.
606604
node = {{ key }}2ObjectBucketSyncMap.getNode(immutable, (length - 1) & hash);
607605
while(node != null) {
608-
if(node.hash != hash || node.key != key) {
606+
if(node.key != key) {
609607
node = node.next();
610608
continue;
611609
}
@@ -656,7 +654,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
656654
synchronized(node) {
657655
if({{ key }}2ObjectBucketSyncMap.getNodePlain(mutable, index) == node) {
658656
for(; ; ) {
659-
if(node.hash == hash && node.key == key) {
657+
if(node.key == key) {
660658
final ObjectReference reference = node.referencePlain();
661659
Object previous = reference.get();
662660
for(; ; ) {
@@ -727,7 +725,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
727725
// node is present and the value is null or expunged.
728726
node = {{ key }}2ObjectBucketSyncMap.getNode(immutable, (length - 1) & hash);
729727
while(node != null) {
730-
if(node.hash != hash || node.key != key) {
728+
if(node.key != key) {
731729
node = node.next();
732730
continue;
733731
}
@@ -778,7 +776,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
778776
synchronized(node) {
779777
if({{ key }}2ObjectBucketSyncMap.getNodePlain(mutable, index) == node) {
780778
for(; ; ) {
781-
if(node.hash == hash && node.key == key) {
779+
if(node.key == key) {
782780
final ObjectReference reference = node.referencePlain();
783781
Object previous = reference.get();
784782
for(; ; ) {
@@ -869,7 +867,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
869867
// node is present.
870868
node = {{ key }}2ObjectBucketSyncMap.getNode(immutable, (length - 1) & hash);
871869
while(node != null) {
872-
if(node.hash != hash || node.key != key) {
870+
if(node.key != key) {
873871
node = node.next();
874872
continue;
875873
}
@@ -903,7 +901,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
903901
synchronized(node) {
904902
if({{ key }}2ObjectBucketSyncMap.getNodePlain(mutable, index) == node) {
905903
for(Node previousNode = null; ; ) {
906-
if(node.hash == hash && node.key == key) {
904+
if(node.key == key) {
907905
final ObjectReference reference = node.referencePlain();
908906
Object previous = reference.get();
909907
for(; ; ) {
@@ -980,7 +978,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
980978
// node is present.
981979
node = {{ key }}2ObjectBucketSyncMap.getNode(immutable, (length - 1) & hash);
982980
while(node != null) {
983-
if(node.hash != hash || node.key != key) {
981+
if(node.key != key) {
984982
node = node.next();
985983
continue;
986984
}
@@ -1038,7 +1036,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
10381036
synchronized(node) {
10391037
if({{ key }}2ObjectBucketSyncMap.getNodePlain(mutable, index) == node) {
10401038
for(Node previousNode = null; ; ) {
1041-
if(node.hash == hash && node.key == key) {
1039+
if(node.key == key) {
10421040
final ObjectReference reference = node.referencePlain();
10431041
Object previous = reference.get();
10441042
for(; ; ) {
@@ -1054,7 +1052,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
10541052

10551053
if(next != null && (witness == null || witness == {{ key }}2ObjectBucketSyncMap.EXPUNGED)) {
10561054
count = 1L;
1057-
} else if(next == null && (witness != null && witness != {{ key }}2ObjectBucketSyncMap.EXPUNGED)) {
1055+
} else if(next == null) {
10581056
if(previousNode != null) {
10591057
previousNode.next(node.nextPlain());
10601058
} else {
@@ -1109,7 +1107,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
11091107
// node is present and the value is null or expunged.
11101108
node = {{ key }}2ObjectBucketSyncMap.getNode(immutable, (length - 1) & hash);
11111109
while(node != null) {
1112-
if(node.hash != hash || node.key != key) {
1110+
if(node.key != key) {
11131111
node = node.next();
11141112
continue;
11151113
}
@@ -1154,7 +1152,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
11541152
synchronized(node) {
11551153
if({{ key }}2ObjectBucketSyncMap.getNodePlain(mutable, index) == node) {
11561154
for(; ; ) {
1157-
if(node.hash == hash && node.key == key) {
1155+
if(node.key == key) {
11581156
final ObjectReference reference = node.referencePlain();
11591157
Object previous = reference.get();
11601158
for(; ; ) {
@@ -1206,7 +1204,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
12061204
// node is present.
12071205
node = {{ key }}2ObjectBucketSyncMap.getNode(immutable, (length - 1) & hash);
12081206
while(node != null) {
1209-
if(node.hash != hash || node.key != key) {
1207+
if(node.key != key) {
12101208
node = node.next();
12111209
continue;
12121210
}
@@ -1251,7 +1249,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
12511249
synchronized(node) {
12521250
if({{ key }}2ObjectBucketSyncMap.getNodePlain(mutable, index) == node) {
12531251
for(; ; ) {
1254-
if(node.hash == hash && node.key == key) {
1252+
if(node.key == key) {
12551253
final ObjectReference reference = node.referencePlain();
12561254
Object previous = reference.get();
12571255
for(; ; ) {
@@ -1304,7 +1302,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
13041302
synchronized(node) {
13051303
if({{ key }}2ObjectBucketSyncMap.getNodePlain(table, index) == node) {
13061304
for(; ; ) {
1307-
if(node.hash == hash && node.key == key) {
1305+
if(node.key == key) {
13081306
node.reference(reference);
13091307
return;
13101308
}
@@ -1349,7 +1347,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
13491347
// node is present.
13501348
node = {{ key }}2ObjectBucketSyncMap.getNode(immutable, (length - 1) & hash);
13511349
while(node != null) {
1352-
if(node.hash != hash || node.key != key) {
1350+
if(node.key != key) {
13531351
node = node.next();
13541352
continue;
13551353
}
@@ -1378,7 +1376,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
13781376
synchronized(node) {
13791377
if({{ key }}2ObjectBucketSyncMap.getNodePlain(mutable, index) == node) {
13801378
for(Node previousNode = null; ; ) {
1381-
if(node.hash == hash && node.key == key) {
1379+
if(node.key == key) {
13821380
final ObjectReference reference = node.referencePlain();
13831381
Object current = reference.get();
13841382
for(; ; ) {
@@ -1442,7 +1440,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
14421440
// node is present.
14431441
node = {{ key }}2ObjectBucketSyncMap.getNode(immutable, (length - 1) & hash);
14441442
while(node != null) {
1445-
if(node.hash != hash || node.key != key) {
1443+
if(node.key != key) {
14461444
node = node.next();
14471445
continue;
14481446
}
@@ -1472,7 +1470,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
14721470
synchronized(node) {
14731471
if({{ key }}2ObjectBucketSyncMap.getNodePlain(mutable, index) == node) {
14741472
for(Node previousNode = null; ; ) {
1475-
if(node.hash == hash && node.key == key) {
1473+
if(node.key == key) {
14761474
final ObjectReference reference = node.referencePlain();
14771475
Object previous = reference.get();
14781476
for(; ; ) {
@@ -1540,7 +1538,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
15401538
// node is present.
15411539
node = {{ key }}2ObjectBucketSyncMap.getNode(immutable, (length - 1) & hash);
15421540
while(node != null) {
1543-
if(node.hash != hash || node.key != key) {
1541+
if(node.key != key) {
15441542
node = node.next();
15451543
continue;
15461544
}
@@ -1569,7 +1567,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
15691567
synchronized(node) {
15701568
if({{ key }}2ObjectBucketSyncMap.getNodePlain(mutable, index) == node) {
15711569
for(; ; ) {
1572-
if(node.hash == hash && node.key == key) {
1570+
if(node.key == key) {
15731571
final ObjectReference reference = node.referencePlain();
15741572
Object current = reference.get();
15751573
for(; ; ) {
@@ -1627,7 +1625,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
16271625
// node is present.
16281626
node = {{ key }}2ObjectBucketSyncMap.getNode(immutable, (length - 1) & hash);
16291627
while(node != null) {
1630-
if(node.hash != hash || node.key != key) {
1628+
if(node.key != key) {
16311629
node = node.next();
16321630
continue;
16331631
}
@@ -1657,7 +1655,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
16571655
synchronized(node) {
16581656
if({{ key }}2ObjectBucketSyncMap.getNodePlain(mutable, index) == node) {
16591657
for(; ; ) {
1660-
if(node.hash == hash && node.key == key) {
1658+
if(node.key == key) {
16611659
final ObjectReference reference = node.referencePlain();
16621660
Object current = reference.get();
16631661
for(; ; ) {
@@ -2520,7 +2518,7 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
25202518
Node node = this;
25212519

25222520
do {
2523-
if(node.hash == hash && node.key == key) return node;
2521+
if(node.key == key) return node;
25242522
} while((node = node.next()) != null);
25252523

25262524
return null;
@@ -2545,20 +2543,18 @@ public class {{ key }}2ObjectBucketSyncMap<V> extends Abstract{{ key }}2ObjectMa
25452543
int length;
25462544

25472545
Node node;
2548-
int nodeHash;
2549-
25502546
while((length = table.length) > 0) {
25512547
if((node = {{ key }}2ObjectBucketSyncMap.getNode(table, (length - 1) & hash)) == null) {
25522548
return null;
2553-
} else if((nodeHash = node.hash) == {{ key }}2ObjectBucketSyncMap.NODE_MOVED) {
2549+
} else if(node.hash == {{ key }}2ObjectBucketSyncMap.NODE_MOVED) {
25542550
table = ((ForwardingNode) node).nextTable;
25552551
} else {
2556-
if(nodeHash == hash && node.key == key) {
2552+
if(node.key == key) {
25572553
return node;
25582554
}
25592555

25602556
while((node = node.next()) != null) {
2561-
if(node.hash == hash && node.key == key) {
2557+
if(node.key == key) {
25622558
return node;
25632559
}
25642560
}

0 commit comments

Comments
 (0)