80 lines
1.2 KiB
Java
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;
|
||
|
}
|
||
|
}
|