65 lines
1.5 KiB
Java
65 lines
1.5 KiB
Java
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 ) );
|
|
}
|
|
}
|