This is the verbatim text of the qbitarry.h include file. It is is provided only for illustration; the copyright remains with Troll Tech.
/****************************************************************************
** $Id: qbitarry.h,v 1.8 1995/04/21 02:44:30 hanord Exp $
**
** Definition of QBitArray class
**
** Author : Haavard Nord
** Created : 940118
**
** Copyright (C) 1994,1995 by Troll Tech AS. All rights reserved.
**
*****************************************************************************/
#ifndef QBITARRY_H
#define QBITARRY_H
#include "qstring.h"
// --------------------------------------------------------------------------
// QBitVal class; a context class for QBitArray::operator[]
//
class QBitArray;
class QBitVal
{
private:
QBitArray *array;
uint index;
public:
QBitVal( QBitArray *a, uint i ) : array(a), index(i) {}
operator int();
QBitVal &operator=( const QBitVal &v );
QBitVal &operator=( int v );
};
// --------------------------------------------------------------------------
// QBitArray class
//
class QBitArray : public QByteArray
{
public:
QBitArray();
QBitArray( uint size );
QBitArray( const QBitArray &a ) : QByteArray( a ) {}
QBitArray &operator=( const QBitArray &a ) // shallow copy
{ return (QBitArray&)assign( a ); }
uint size() const { return ((bitarr_data*)p)->nbits; }
bool resize( uint size ); // resize bit array
bool fill( bool v, int size = -1 ); // fill bit array with value
void detach(); // detach bit array
QBitArray copy() const; // get deep copy
bool testBit( uint i ) const; // test if bit set
void setBit( uint i ); // set bit
void setBit( uint i, bool v ) // set bit to value
{ if ( v ) setBit(i); else clearBit(i); }
void clearBit( uint i ); // clear bit
bool toggleBit( uint i ); // toggle/invert bit
bool at( uint i ) const // access bit
{ return testBit(i); }
QBitVal operator[]( int i ) // get/set bit
{ return QBitVal( (QBitArray*)this, i ); }
QBitArray &operator&=( const QBitArray & ); // AND bits
QBitArray &operator|=( const QBitArray & ); // OR bits
QBitArray &operator^=( const QBitArray & ); // XOR bits
QBitArray operator~() const; // NOT bits
protected:
struct bitarr_data : QGArray::array_data { // shared bit array
uint nbits;
};
array_data *newData() { return new bitarr_data; }
void deleteData( array_data *p ) { delete (bitarr_data*)p; }
private:
void pad0();
};
// --------------------------------------------------------------------------
// Misc. QBitArray operator functions
//
QBitArray operator&( const QBitArray &, const QBitArray & );
QBitArray operator|( const QBitArray &, const QBitArray & );
QBitArray operator^( const QBitArray &, const QBitArray & );
inline QBitVal::operator int()
{
return array->testBit( index );
}
inline QBitVal &QBitVal::operator=( const QBitVal &v )
{
array->setBit( index, v.array->testBit(v.index) );
return *this;
}
inline QBitVal &QBitVal::operator=( int v )
{
array->setBit( index, v );
return *this;
}
// --------------------------------------------------------------------------
// QBitArray stream functions
//
QDataStream &operator<<( QDataStream &, const QBitArray & );
QDataStream &operator>>( QDataStream &, QBitArray & );
#endif // QBITARRY_H