/* * Author: tdanford * Date: Nov 10, 2008 */ package org.seqcode.gseutils; public interface BitVector { /** * Gives a hex representation of the BitVector. Leading bits (i.e., if the length of the * vector is not divisible by 4) are assumed to be zeros. * @return The String object containing the Hex representation. */ public String toHexString(); public boolean isOn(int index); public boolean isOff(int index); public int length(); public int countOnBits(); public void turnOnBit(int index); public void turnOffBit(int index); public static class Complete implements BitVector { private int length; private boolean value; public Complete(int len, boolean v) { length = len; value = v; } public int countOnBits() { return value ? length : 0; } public boolean isOff(int index) { return !value; } public boolean isOn(int index) { return value; } public int length() { return length; } public String toHexString() { int fs = length/4; StringBuilder sb = new StringBuilder(); if(value) { for(int i = 0; i < fs; i++) { sb.append("F"); } int extra = length%4; int value = 1; for(int i = 0, base = 8; i < extra; i++, base /= 2) { value += base; } if(value < 10) { sb.append(String.valueOf(value)); } else { int c = (char)('A' + (value-10)); sb.append(c); } } else { for(int i = 0; i <= fs; i++) { sb.append("0"); } } return sb.toString(); } public void turnOffBit(int index) { throw new UnsupportedOperationException(String.format("BitVector.Complete.turnOffBit()")); } public void turnOnBit(int index) { throw new UnsupportedOperationException(String.format("BitVector.Complete.turnOnBit()")); } } }