package org.spigotmc; import org.bukkit.craftbukkit.util.LongHash; public class FlatMap { 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 ) ); } }