AI_BitField.h

Go to the documentation of this file.
00001 #ifndef AI_BITFIELD_H
00002 #define AI_BITFIELD_H
00003 
00004 class AI_BitField
00005 {
00006 private:
00007     unsigned char *m_ptr_bytes;
00008     int m_i_size;
00009     int m_i_byte_size;
00010 
00011 public:
00012     AI_BitField();
00013     ~AI_BitField();
00014 
00015     void resize(const int i_size);
00016     void reset(void);
00017     void set(const int i);
00018     void unset(const int i);
00019     const bool isSet(const int i) const;
00020     const int getSize(void) const;
00021 };
00022 
00023 
00024 inline
00025 AI_BitField::AI_BitField() :
00026     m_ptr_bytes(0),
00027     m_i_size(0)
00028 {
00029 }
00030 
00031 
00032 inline
00033 AI_BitField::~AI_BitField()
00034 {
00035     if (m_ptr_bytes)
00036         delete m_ptr_bytes;
00037 }
00038 
00039 
00040 inline
00041 void AI_BitField::resize(const int i_size)
00042 {
00043     if (i_size > m_i_size)
00044     {   
00045         m_i_size = i_size;
00046         m_i_byte_size = i_size / 8 + (i_size % 8 ? 1 : 0);
00047 
00048         m_ptr_bytes = (unsigned char*)realloc( (void*)m_ptr_bytes, m_i_size );
00049     }
00050 }
00051 
00052 
00053 inline
00054 void AI_BitField::reset(void)
00055 {
00056     memset (m_ptr_bytes, 0, m_i_byte_size);
00057 }
00058 
00059 
00060 inline
00061 void AI_BitField::set(const int i)
00062 {
00063     unsigned char &c = m_ptr_bytes[ i / 8 ];
00064     c |= 1<<(i%8);
00065 }
00066 
00067 
00068 inline
00069 void AI_BitField::unset(const int i)
00070 {
00071     unsigned char &c = m_ptr_bytes[ i / 8 ];
00072     c &= ~(1<<(i%8));
00073 }
00074 
00075 
00076 inline
00077 const bool AI_BitField::isSet(const int i) const
00078 {
00079     unsigned char c = m_ptr_bytes[ i / 8 ];
00080     return (c & 1<<(i%8)) ? true : false;
00081 }
00082 
00083 
00084 inline
00085 const int AI_BitField::getSize(void) const
00086 {
00087     return m_i_size;
00088 }
00089 
00090 
00091 #endif