// ННГУ, ВМК, Курс "Методы программирования-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
Хостинг от uCoz