3
0
Fork 1
KCauldronX/src/main/java/org/spigotmc/FlatMap.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 ) );
}
}