Skip to content

Commit 10f0d1f

Browse files
committed
SwissTable to extend AbstractMap
1 parent d2ac1bc commit 10f0d1f

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

src/main/java/io/timeandspace/smoothie/SwissTable.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,19 @@
2121
import sun.misc.Unsafe;
2222

2323
import java.nio.ByteOrder;
24+
import java.util.AbstractMap;
2425
import java.util.Arrays;
2526
import java.util.ConcurrentModificationException;
2627
import java.util.Objects;
28+
import java.util.Set;
2729

2830
import static io.timeandspace.smoothie.SmoothieMap.LONG_PHI_MAGIC;
2931
import static io.timeandspace.smoothie.UnsafeUtils.ARRAY_OBJECT_BASE_OFFSET_AS_LONG;
3032
import static io.timeandspace.smoothie.UnsafeUtils.ARRAY_OBJECT_INDEX_SCALE_AS_LONG;
3133
import static io.timeandspace.smoothie.UnsafeUtils.U;
3234
import static io.timeandspace.smoothie.Utils.BYTE_SIZE_DIVISION_SHIFT;
3335

34-
public final class SwissTable<K, V> {
36+
public final class SwissTable<K, V> extends AbstractMap<K, V> {
3537

3638
private static final boolean LITTLE_ENDIAN = ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN;
3739
private static final int CONTROL_BITS = 7;
@@ -177,6 +179,7 @@ private void init(int capacity) {
177179
Arrays.fill(controls, EMPTY_CONTROL_GROUP);
178180
}
179181

182+
@Override
180183
public int size() {
181184
return size;
182185
}
@@ -266,7 +269,8 @@ private long lowestMatchIndexFromTrailingZeros(long groupFirstSlotIndex, int tra
266269
(long) trailingZeros >>> BYTE_SIZE_DIVISION_SHIFT);
267270
}
268271

269-
public @Nullable V get(K key) {
272+
@Override
273+
public @Nullable V get(Object key) {
270274
Utils.checkNonNull(key);
271275
long hash = keyHashCode(key);
272276
long hashControlBits = hashControlBits(hash);
@@ -295,12 +299,18 @@ private long lowestMatchIndexFromTrailingZeros(long groupFirstSlotIndex, int tra
295299
}
296300
}
297301

302+
@Override
298303
public @Nullable V put(K key, V value) {
299304
Utils.checkNonNull(key);
300305
long hash = keyHashCode(key);
301306
return putInternal(key, hash, value);
302307
}
303308

309+
@Override
310+
public Set<Entry<K, V>> entrySet() {
311+
throw new UnsupportedOperationException();
312+
}
313+
304314
private @Nullable V putInternal(K key, long hash, V value) {
305315
long hashControlBits = hashControlBits(hash);
306316
long initialGroupFirstSlotIndex = firstSlotIndex(hash);

0 commit comments

Comments
 (0)