Main Page | Class Hierarchy | Class List | File List | Class Members | File Members | Related Pages

bitarray.h

Go to the documentation of this file.
00001 
00006 #ifndef _BITARRAY_H_
00007 #define _BITARRAY_H_
00008 
00009 #include "bitstream.h"
00010 
00020 template<typename T> class Bitarray 
00021 {
00022   public:
00023     
00031     Bitarray(Bitstream &bs)
00032     {
00033       bs.Read(m_data, T::size);
00034     }
00035     
00041     void Write(Bitstream &bs) const
00042     {
00043       bs.Write(m_data, T::size);
00044     }
00045     
00053     int Get(int i) const
00054     {
00055       int startbit = T::bits[i] & 0x1F; //Start bit position in integer
00056       int endbit = T::bits[i+1] & 0x1F; //End bit position in integer
00057       
00058       //Get integer which contains the field and remove bits of neighbour fields
00059       return m_data[T::bits[i] >> 5] << startbit >> (32 - endbit + startbit);
00060     }
00061 
00069     void Set(int i, int x)
00070     {
00071       int startbit = T::bits[i] & 0x1F; //Start bit position in integer
00072       int endbit = T::bits[i+1] & 0x1F; //End bit position in integer     
00073       int intnum = T::bits[i] >> 5; //Integer which contains the field
00074       //Set bits belonging to field to 1 and other bits to 0
00075       unsigned int mask = ((unsigned int)(~0) >> startbit) &
00076                           ((unsigned int)(~0) << (32 - endbit));
00077       
00078       //Make field bits zero and then set them to new value
00079       m_data[intnum] &= ~mask;
00080       m_data[intnum] |= (x << (32 - endbit)) & mask;
00081     }
00082 
00089     int Max(int i) const
00090     {
00091       return (1 << (T::bits[i+1] - T::bits[i])) - 1;
00092     }
00093     
00105     unsigned int operator^ (int i) const
00106     {
00107       return Get(i);
00108     }
00109       
00110   private:
00111     unsigned int m_data[((T::size) + 31) >> 5]; //Data, minimal size to fit all bits
00112 
00113 };
00114 
00115 #endif //_BITARRAY_H_

Generated on Wed Sep 6 00:17:56 2006 for Kraken by  doxygen 1.4.4