package es.tid.pce.computingEngine.algorithms.sson; import java.util.Arrays; public class BitmapChannelState { private byte[] bytesBitmap; private int length; private int sumBitsBitmap; public BitmapChannelState(){ } public BitmapChannelState(int num_channels){ this.setLength(num_channels); this.bytesBitmap = new byte[length/8+1]; } public byte[] getBytesBitmap() { return bytesBitmap; } public void arraycopyBytesBitmap(byte[] bytesBitmap) { System.arraycopy(bytesBitmap, 0, this.bytesBitmap, 0, bytesBitmap.length); } public void setBytesBitmap(byte[] bytesBitmap) { this.bytesBitmap = bytesBitmap; } public int getNumberBytes(){ return bytesBitmap.length; } public int getNumberBytes(int num){ int numberBytes = num/8; if ((numberBytes*8)<num){ numberBytes++; } return numberBytes; } /* * Initialize function sets all bits in the bitmap to '1', meaning * that all channels are available for the connection request. */ public void Initialize(){ for (int i=0; i<((length/8)+1)*8; i++){ if (i>=length){ if(i%8>length%8){ bytesBitmap[i/8]=(byte)((bytesBitmap[i/8])&((0xFE)<<(8-(i%8)))); } else{ bytesBitmap[i/8]=(byte)0xFF; } }else{ bytesBitmap[i/8]=(byte) 0xFF; } } } public void setLength(int length) { this.length = length; } public int getLength() { return length; } private boolean equalsBytes(byte[] bytes1, byte[] bytes2){ for (int i =0;i<bytes1.length;i++){ if ((bytes1[i] | bytes2[i]) != (bytes1[i])){ return false; } } return true; } public int getSumaBits(){ sumBitsBitmap=0; for (int i=0; i<bytesBitmap.length*8; i++){ if ((bytesBitmap[i/8]&(0x80>>(i%8))) == (0x80>>i%8)){ sumBitsBitmap = sumBitsBitmap + 1; } } return sumBitsBitmap; } @Override public String toString() { return "BitmapChannelState [bytesBitmap=" + Arrays.toString(bytesBitmap) + ", length=" + length + "]"; } }