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