package org.limewire.collection; /** * Provides an XOR view. <code>XorView</code> gets and finds the next set * (equal to 1) and clear (equal to 0) bit starting at a specific location. * <p> * See <a href="http://en.wikipedia.org/wiki/Exclusive_or">exclusive or</a> * for more information. <pre> void sampleCodeXorView(){ BitSet bs1 = new BitSet(); bs1.set(0); bs1.set(1); BitSet bs2 = new BitSet(); bs2.set(0); bs2.set(2); BitField bf1 = new BitFieldSet(bs1, 5); BitField bf2 = new BitFieldSet(bs2, 5); printBitField(bf1, "bf1"); printBitField(bf2, "bf2"); XorView xov = new XorView(bf1, bf2); printBitField(xov, "xov"); } void printBitField(BitField bf, String bfName){ System.out.print(bfName + ": "); for(int i = 0; i < bf.maxSize(); i++){ int j = 0; if(bf.get(i)) j = 1; System.out.print(j); } System.out.println(""); } Output: bf1: 11000 bf2: 10100 xov: 01100 </pre> */ public class XorView extends BooleanFunction { public XorView(BitField first, BitField... more) { super(first, more); } public boolean get(int i) { boolean ret = fields[0].get(i); for (int j = 1;j < fields.length;j++) { ret ^= fields[j].get(i); } return ret; } public int nextClearBit(int startIndex) { // not very efficient for (int i = startIndex; i < maxSize(); i++) { if (!get(i)) return i; } return -1; } public int nextSetBit(int startIndex) { // not very efficient for (int i = startIndex; i < maxSize(); i++) { if (get(i)) return i; } return -1; } }