package com.bergerkiller.bukkit.common.internal;

import com.bergerkiller.generated.com.bergerkiller.bukkit.common.internal.LongHashSetHandle;

class LongHashSet {
#if version >= 1.14
    public static (LongHashSetHandle) com.bergerkiller.bukkit.common.internal.LongHashSet createNew(int size) {
        return new it.unimi.dsi.fastutil.longs.LongOpenHashSet(size);
    }
#else
    public static (LongHashSetHandle) com.bergerkiller.bukkit.common.internal.LongHashSet createNew(int size) {
        return new com.bergerkiller.bukkit.common.internal.LongHashSet(size);
    }
#endif

    <code>
    public static LongHashSetHandle createNew() {
        return createNew(16);
    }
    </code>

#if version >= 1.14
    public abstract (java.util.Iterator<Long>) it.unimi.dsi.fastutil.longs.LongIterator iterator();
#else
    public (java.util.Iterator<Long>) com.bergerkiller.bukkit.common.internal.LongHashSet.LongIterator iterator();
#endif

    public int size();
    public boolean isEmpty();
    public void clear();
    public boolean add(long value);
    public boolean remove(long value);
    public boolean contains(long value);

#if version >= 1.14
    public long popFirstElement() {
        it.unimi.dsi.fastutil.longs.LongIterator iter;
        iter = instance.iterator();
        long result = iter.nextLong();
        iter.remove();
        return result;
    }

    public long[] toArray() {
        long[] result = new long[instance.size()];
        it.unimi.dsi.fastutil.longs.LongIterator iter;
        iter = instance.iterator();
        for (int i = 0; i < result.length && iter.hasNext(); i++) {
            result[i] = iter.nextLong();
        }
        return result;
    }

    public long[] popAll() {
        long[] result = new long[instance.size()];
        it.unimi.dsi.fastutil.longs.LongIterator iter;
        iter = instance.iterator();
        for (int i = 0; i < result.length && iter.hasNext(); i++) {
            result[i] = iter.nextLong();
        }
        instance.clear();
        return result;
    }

    public void trim() {
        if (instance instanceof it.unimi.dsi.fastutil.longs.LongLinkedOpenHashSet) {
            ((it.unimi.dsi.fastutil.longs.LongLinkedOpenHashSet) instance).trim();
        } else if (instance instanceof it.unimi.dsi.fastutil.longs.LongOpenHashSet) {
            ((it.unimi.dsi.fastutil.longs.LongOpenHashSet) instance).trim();
        }
    }
#else
    public long popFirstElement:popFirst();
    public long[] toArray();
    public long[] popAll();
    private void trim:rehash();
#endif
}