package org.limewire.collection;
/**
* Provides a view over two or more <code>BitField</code> instances that
* represents a boolean function. This class itself is a <code>BitField</code>
* so several <code>BitField</code>s may be chained to form complex functions.
* See <a href=
* "http://en.wikipedia.org/wiki/Boolean_function">Boolean Function</a> for
* more information.
*/
abstract class BooleanFunction implements BitField {
protected final BitField [] fields;
protected BooleanFunction(BitField first, BitField... more) {
this.fields = new BitField[more.length + 1];
fields[0] = first;
System.arraycopy(more,0,fields,1, more.length);
int maxSize = fields[0].maxSize();
for (BitField bf : fields) {
if (bf.maxSize() != maxSize)
throw new IllegalArgumentException("bitfield "+bf+" doesn't have size "+maxSize);
}
}
public int maxSize() {
return fields[0].maxSize();
}
public int cardinality() {
int ret = 0;
for (int i = 0; i < maxSize(); i++)
ret += get(i) ? 1 : 0;
return ret;
}
}