public final boolean tokenhood;
public final BitVector path;
- /** "parse" a token from the raw 37+1+14 bits in the north proper stopper */
+ /** "parse" a token from the raw 1+14+37 bits in the north proper stopper */
public MarinaPacket(BitVector singleBitVector) {
+ if (singleBitVector.getNumBits()!=1+14+37)
+ throw new RuntimeException("wrong number of bits!");
this.data = new BitVector(37, "marina packet data");
this.path = new BitVector(14, "marina packet path");
- this.tokenhood = singleBitVector.get(37);
- for(int i=0; i<37; i++) data.set(i, singleBitVector.get(i));
- for(int i=38; i<38+14; i++) path.set(i-38, singleBitVector.get(i));
+ this.tokenhood = !singleBitVector.get(0);
+ for(int i=0; i<14; i++) path.set(i, singleBitVector.get(i+1));
+ for(int i=0; i<37; i++) data.set(i, singleBitVector.get(i+15));
}
/** manually assemble a packet */
/** convert a packet into a single BitVector, suitable for insertion in the north proper stopper */
public BitVector toSingleBitVector() {
- BitVector bv = new BitVector(37+1+14, "marina packet");
- for(int i=0; i<37; i++) bv.set(i, data.get(i));
- bv.set(37, !tokenhood);
- for(int i=38; i<38+14; i++) bv.set(i, path.get(i-38));
+ BitVector bv = new BitVector(1+14+37, "marina packet");
+ bv.set(0, !tokenhood);
+ for(int i=0; i<14; i++) bv.set(i+1, path.get(i));
+ for(int i=0; i<37; i++) bv.set(i+15, data.get(i));
return bv;
}
public String toString() {
- StringBuffer ret = new StringBuffer();
- ret.append("MarinaPacket(");
- ret.append(data.toString());
- ret.append(",");
- ret.append(tokenhood);
- ret.append(",");
- ret.append(path);
- ret.append(")");
- return ret.toString();
+ return
+ "tokenhood="+(tokenhood ? "token" : "data")
+ + ", path[14:1]=" + path.bitReverse().getState()
+ + ", data[37:1]=" + data.bitReverse().getState();
}
}
\ No newline at end of file