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


Generated at 04:27, 1995/05/20 by the webmaster at Troll Tech