/* * CENA C++ Utilities * * by Stephane Chatty * * Copyright 1992 * Centre d'Etudes de la Navigation Aerienne (CENA) * * bit fields * * $Id$ * $CurLog$ */ #include "BitField.h" #include #include IvlBitField :: IvlBitField () { memset ((char*) Chunks, 0, 8 * sizeof (long)); } IvlBitRef IvlBitField :: operator [] (int i) { if (i < 0 || i >= 8 * sizeof (long)) { fprintf (stderr, "Bad access to bitfield: index %d\n", i); i = 0; } short q = i / sizeof (long); short r = i - q * sizeof (long); return IvlBitRef (*this, q, r); } IvlBitRef :: operator bool () const { return bool (Field.Chunks [Chunk] & (1L << Offset)); } bool IvlBitRef :: operator = (bool b) const { long* l = Field.Chunks + Chunk; long m = (1L << Offset); if (b) (*l) |= m; else (*l) &= ~m; return b; }