// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.server.spawning.util;

import com.hypixel.hytale.math.util.ChunkUtil;
import com.hypixel.hytale.common.util.BitSetUtil;
import javax.annotation.Nonnull;
import java.util.BitSet;

public class ChunkColumnMask
{
    public static final int COLUMNS = 1024;
    private final BitSet columns;
    
    public ChunkColumnMask() {
        this.columns = new BitSet(1024);
    }
    
    public void copyFrom(@Nonnull final ChunkColumnMask src) {
        BitSetUtil.copyValues(src.columns, this.columns);
    }
    
    public boolean isEmpty() {
        return this.columns.isEmpty();
    }
    
    public void clear() {
        this.columns.clear();
    }
    
    public void set() {
        this.columns.set(0, 1024);
    }
    
    public boolean get(final int x, final int z) {
        return this.columns.get(ChunkUtil.indexColumn(x, z));
    }
    
    public void set(final int x, final int z) {
        this.columns.set(ChunkUtil.indexColumn(x, z));
    }
    
    public void clear(final int x, final int z) {
        this.columns.clear(ChunkUtil.indexColumn(x, z));
    }
    
    public void clear(final int index) {
        this.columns.clear(index & 0x3FF);
    }
    
    public void set(final int x, final int z, final boolean value) {
        this.columns.set(ChunkUtil.indexColumn(x, z), value);
    }
    
    public boolean get(final int index) {
        return this.columns.get(index & 0x3FF);
    }
    
    public void set(final int bitIndex) {
        this.columns.set(bitIndex & 0x3FF);
    }
    
    public int nextSetBit(final int fromIndex) {
        return this.columns.nextSetBit(fromIndex & 0x3FF);
    }
    
    public int nextClearBit(final int fromIndex) {
        return this.columns.nextClearBit(fromIndex & 0x3FF);
    }
    
    public int previousSetBit(final int fromIndex) {
        return this.columns.previousSetBit(fromIndex & 0x3FF);
    }
    
    public int previousClearBit(final int fromIndex) {
        return this.columns.previousClearBit(fromIndex & 0x3FF);
    }
    
    public int cardinality() {
        return this.columns.cardinality();
    }
}
