Newer
Older
ultramine_bukkit / src / main / java / org / spigotmc / FlatMap.java
@vlad20012 vlad20012 on 24 Feb 2017 1 KB initial
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));
	}
}