m1.chocobarlite/src/chocobar/combi/BitSet.java
2009-05-01 08:07:06 +00:00

80 lines
1.2 KiB
Java

package chocobar.combi;
/**
* Classe pour faire un bitset.
*/
public final class BitSet
{
// On utilise un long, pour maximiser la place utile
// TODO - Pour l'instant on utilise qu'un seul bitfield
private long bits[];
public BitSet(long l)
{
bits = new long[1];
// Init
bits[0] = l;
}
public BitSet(long l, long s)
{
System.out.println("BitSet("+l+","+s+")");
int size = (int)(s / 64) + 1;
bits = new long[size];
bits[0] = l;
for (int i=1; (i<size); i++) {
bits[i] = 0;
}
}
public BitSet(long[] l)
{
int size = l.length;
bits = new long[size];
for (int i=0; (i<size); i++) {
bits[i] = l[i];
}
}
// Getter & Setter for bits
public boolean testBit(int i)
{
// sizeof(long) = 64
int n = i / 64;
int o = i % 64;
// BitMask
long m = ((long) 1) << o;
return ((bits[n] & m) == 0);
}
// Getter & Setter for bits
public void setBit(long i)
{
// sizeof(long) = 64
long n = i / 64;
long o = i % 64;
// BitMask
long m = ((long) 1) << o;
bits[(int)n] |= m;
}
// Getter & Setter for bits
public void clearBit(long i)
{
// sizeof(long) = 64
long n = i / 64;
long o = i % 64;
// BitMask
long m = ((long) 1) << o;
bits[(int)n] &= ~m;
}
}