`` Array of Bits
`` Using integers for storage
`` www.scriptol.org
`` Requires a Scriptol Compiler
`` 2005
class ArrayOfBits
int[] bits `the array of integers
int size `the number of bits
constant int CBIT = 32
`Create the array of bits as a string
void ArrayOfBits(int s)
int i = (s + CBIT - 1) / CBIT
for int j in 0 -- i let bits.push(0)
size = s
return
` Return a bit at pos
boolean get(int pos)
int i = pos / CBIT
int bit = bits[i]
int mask = 1 << (pos mod CBIT)
bit = bit & mask
return bit <> 0
`Change a bit to 0 or 1 at pos according to value
void set(int pos, boolean value)
int i = pos / CBIT
int b = bits[i]
int mask = 1 << (pos mod CBIT)
if value = true
b = b | mask
else
b = b & ~mask
/if
bits[i] = b
return
`Invert the value of a bit, true become false and conversely
void flip(int pos)
int i = pos / CBIT
int b = bits[i]
int mask = 1 << (pos mod CBIT)
b = b ^ mask
bits[i] = b
return
`Return the string of bits as an array of integers
array toArray()
array x
for int i in 0 -- size
boolean j = get(i)
if j = true
x.push(1)
else
x.push(0)
/if
/for
return x
/class
// demo
ArrayOfBits aob = ArrayOfBits(14)
aob.set(5, true)
aob.flip(8)
array y = aob.toArray()
print "Only 5 and 8 must be true:"
y.display()