Initial commit (Forge 1291).
This commit is contained in:
64
src/main/java/org/spigotmc/FlatMap.java
Normal file
64
src/main/java/org/spigotmc/FlatMap.java
Normal file
@ -0,0 +1,64 @@
|
||||
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 ) );
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user