package org.spigotmc; import org.bukkit.craftbukkit.util.LongHash; public class FlatMap<V> { private static final int FLAT_LOOKUP_SIZE = 512; private final Object[][] flatLookup = new Object[FLAT_LOOKUP_SIZE * 2][FLAT_LOOKUP_SIZE * 2]; public void put(long msw, long lsw, V value) { long acx = Math.abs(msw); long acz = Math.abs(lsw); if(acx < FLAT_LOOKUP_SIZE && acz < FLAT_LOOKUP_SIZE) { flatLookup[(int) (msw + FLAT_LOOKUP_SIZE)][(int) (lsw + FLAT_LOOKUP_SIZE)] = value; } } public void put(long key, V value) { put(LongHash.msw(key), LongHash.lsw(key), value); } public void remove(long key) { put(key, null); } public void remove(long msw, long lsw) { put(msw, lsw, null); } public boolean contains(long msw, long lsw) { return get(msw, lsw) != null; } public boolean contains(long key) { return get(key) != null; } public V get(long msw, long lsw) { long acx = Math.abs(msw); long acz = Math.abs(lsw); if(acx < FLAT_LOOKUP_SIZE && acz < FLAT_LOOKUP_SIZE) { return (V) flatLookup[(int) (msw + FLAT_LOOKUP_SIZE)][(int) (lsw + FLAT_LOOKUP_SIZE)]; } else { return null; } } public V get(long key) { return get(LongHash.msw(key), LongHash.lsw(key)); } }