// ННГУ, ВМК, Курс "Методы программирования-2", С++, ООП // // bitfield.h - Copyright (c) Гергель В.П. 07.05.2001 // // Битовые поля #ifndef __BITFIELD_H #define __BITFIELD_H #include <iostream.h> #include <stdlib.h> typedef unsigned int TELEM; class TBitField { private: int BitLen; // длина битового поля - макс. к-во битов TELEM *pMem; // память для представления битового поля int MemLen; // к-во эл-тов Мем для представления бит.поля // методы реализации int GetMemIndex ( const int n ) const; // индекс Мем для бита n (#О2) TELEM GetMemMask ( const int n ) const; // битовая маска для бита n (#О3) public: TBitField(int len); // (#О1) TBitField(const TBitField &bf); // (#П1) ~TBitField(); // (#С) // доступ к битам int GetLength ( void ) const; // получить длину (к-во битов) (#О) void SetBit ( const int n ); // установить бит (#О4) void ClrBit ( const int n ); // очистить бит (#П2) int GetBit ( const int n ) const; // получить значение бита (#Л1) // битовые операции int operator==(const TBitField &bf); // сравнение (#О5) TBitField & operator=(const TBitField &bf); // присваивание (#П3) TBitField operator| (const TBitField &bf); // операцмя "или" (#О6) TBitField operator& (const TBitField &bf); // операцмя "и" (#Л2) TBitField operator~ ( void ); // отрицание (#С) friend istream &operator>>(istream &istr, TBitField &bf); // (#О7) friend ostream &operator<<(ostream &ostr, const TBitField &bf); // (#П4) }; // Структура хранения битового поля // бит.поле - набор битов с номерами от 0 до BitLen // массив pМем рассматривается как последовательность MemLen элементов // биты в эл-тах pМем нумеруются справа налево (от младших к старшим) // О8 Л2 П4 С2 #endif