package Roguelike.Util; public final class EnumBitflag<T extends Enum<T>> { private int bitflag = 0; public EnumBitflag() { } public EnumBitflag( T... vals ) { for ( T val : vals ) { setBit( val ); } } public int getBitFlag() { return bitflag; } public void setBitFlag(int val) { bitflag = val; } public void setAll( EnumBitflag<T> other ) { bitflag |= other.bitflag; } public void setBit( T val ) { bitflag |= ( 1 << ( val.ordinal() + 1 ) ); } public void clear() { bitflag = 0; } public void setAll( Class<T> type ) { int numVals = type.getEnumConstants().length; for ( int i = 0; i < numVals; i++ ) { bitflag |= ( 1 << ( i + 1 ) ); } } public void clearBit( T val ) { bitflag &= ~( 1 << ( val.ordinal() + 1 ) ); } public boolean contains( T val ) { return ( ( 1 << ( val.ordinal() + 1 ) ) & bitflag ) != 0; } public boolean intersect( EnumBitflag<T> other ) { return ( other.bitflag & bitflag ) != 0; } }