Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

TLDynamicBitField< T > Class Template Reference

Dynamic-sized bitfield template. More...

#include <tlbitfield.h>

Collaboration diagram for TLDynamicBitField< T >:

Collaboration graph
[legend]
List of all members.

Public Types

typedef uint nents_t

Public Member Functions

 TLDynamicBitField (size_t _N)
 Creates an uninitialized bitfield of passed size (may be 0).

 TLDynamicBitField (size_t _N, bool bitval)
 Creates a bitfield of passed size (may be 0) with all elements set to passed value.

 TLDynamicBitField (const TLDynamicBitField< T > &b)
 Creates a copy of the passed bitfield.

 ~TLDynamicBitField ()
 Destructor frees memory.

TLDynamicBitFieldoperator= (const TLDynamicBitField< T > &b)
 Assignment operator: copy bit values:.

void resize (size_t newN)
 Resize the bitfield.

void resize (size_t newN, bool ini_val)
 Resize the bitfield.

void SetBit (size_t bit)
 Set a bit; bit in range 0..N-1; no range check!

void ClrBit (size_t bit)
 Clear a bit; bit in range 0..N-1; no range check!

bool GetBit (size_t bit)
 Query a bit value; bit in range 0..N-1; no range check!

void AssBit (size_t bit, bool val)
 Assign bit value; bit in range 0..N-1; no range check!

void SetAll ()
 Set all bits (to 1).

void ClrAll ()
 Clear all bits (to 0).

size_t CountSet ()
 Count number of bits set.

size_t CountClr ()
 Count number of bits not set.

ssize_t SearchFirstSet ()
 Search bit address of first set (1) bit in bitfield.

ssize_t SearchFirstClr ()
 Search bit address of first cleared (0) bit in bitfield.


Private Member Functions

void _SetAllEnts (T val)
 Used to set/clear _all_ bits.

void _CopyFrom (const TLDynamicBitField< T > &b)
 Copy bit field with content.

void _SetVals (size_t _N)
 Set various values.

void _Initialize (size_t _N)
 Initialize object.

void _Free ()
 Free data.


Static Private Member Functions

nents_t _NEntsOfN (size_t _N)
 Calculate number of entries for passed number of bits.


Private Attributes

size_t N
 Number of bits in the bitfield.

nents_t nents
 Number of entries in the bitfield array.

T * bits
 The actual bitfield array [nents].

exmask
 This mask contains all excess (unused) bits in bits[nents-1].


Static Private Attributes

const T band = T(8*sizeof(T)-1)
 AND mask for part of bit address stored inside one entry.

const int bshift
 Number of bits to shift left to get entry index from bit address.

const size_t bits_per_ent = 8*sizeof(T)
 Number of bits per entry:.

const T all_clr = T(0)
 Constant of type T with all bits cleared.

const T all_set = ~all_clr
 Constant of type T with all bits set.


Friends

int DoTestBitFields ()

Detailed Description

template<typename T>
class TLDynamicBitField< T >

Dynamic-sized bitfield template.

Author:
Wolfgang Wieser ] wwieser (a) gmx <*> de [
Implements a dynamic resizeable bitfield template.

This is not as fast as TLStaticBitField.

Template parameter:
T: Type to use for bit storage. Recommend one word on the underlying architecture; probably size_t is a good choice.

Note:
Presently, sizeof(T) must be one of the following values: 1,2,4,8,16. Adopt bshift calculation for other sizes.
This class is "C++-safe"; assignent and copy constructor will copy the bitfield data.

Definition at line 283 of file tlbitfield.h.


Member Typedef Documentation

template<typename T>
typedef uint TLDynamicBitField< T >::nents_t
 

Type for the number of entries; must be capable of representing N/(8*sizeof(T)).

Definition at line 289 of file tlbitfield.h.

Referenced by TLDynamicBitField< T >::_CopyFrom(), TLDynamicBitField< T >::_NEntsOfN(), TLDynamicBitField< T >::_SetAllEnts(), TLDynamicBitField< T >::CountClr(), TLDynamicBitField< T >::CountSet(), TLDynamicBitField< T >::resize(), TLDynamicBitField< T >::SearchFirstClr(), and TLDynamicBitField< T >::SearchFirstSet().


Constructor & Destructor Documentation

template<typename T>
TLDynamicBitField< T >::TLDynamicBitField size_t  _N  )  [inline]
 

Creates an uninitialized bitfield of passed size (may be 0).

Definition at line 349 of file tlbitfield.h.

References TLDynamicBitField< T >::_Initialize().

template<typename T>
TLDynamicBitField< T >::TLDynamicBitField size_t  _N,
bool  bitval
[inline]
 

Creates a bitfield of passed size (may be 0) with all elements set to passed value.

Definition at line 352 of file tlbitfield.h.

References TLDynamicBitField< T >::_Initialize(), TLDynamicBitField< T >::_SetAllEnts(), TLDynamicBitField< T >::all_clr, and TLDynamicBitField< T >::all_set.

template<typename T>
TLDynamicBitField< T >::TLDynamicBitField const TLDynamicBitField< T > &  b  )  [inline]
 

Creates a copy of the passed bitfield.

Definition at line 355 of file tlbitfield.h.

References TLDynamicBitField< T >::_CopyFrom().

template<typename T>
TLDynamicBitField< T >::~TLDynamicBitField  )  [inline]
 

Destructor frees memory.

Definition at line 358 of file tlbitfield.h.

References TLDynamicBitField< T >::_Free().


Member Function Documentation

template<typename T>
void TLDynamicBitField< T >::_CopyFrom const TLDynamicBitField< T > &  b  )  [inline, private]
 

Copy bit field with content.

For internal use only.

Definition at line 325 of file tlbitfield.h.

References TLDynamicBitField< T >::bits, TLDynamicBitField< T >::exmask, TLDynamicBitField< T >::N, TLDynamicBitField< T >::nents, and TLDynamicBitField< T >::nents_t.

Referenced by TLDynamicBitField< T >::operator=(), and TLDynamicBitField< T >::TLDynamicBitField().

template<typename T>
void TLDynamicBitField< T >::_Free  )  [inline, private]
 

Free data.

For internal use only.

Definition at line 344 of file tlbitfield.h.

References TLDynamicBitField< T >::bits, FREE(), TLDynamicBitField< T >::N, and TLDynamicBitField< T >::nents.

Referenced by TLDynamicBitField< T >::operator=(), and TLDynamicBitField< T >::~TLDynamicBitField().

template<typename T>
void TLDynamicBitField< T >::_Initialize size_t  _N  )  [inline, private]
 

Initialize object.

For internal use only.

Definition at line 341 of file tlbitfield.h.

References TLDynamicBitField< T >::_SetVals(), TLDynamicBitField< T >::bits, and TLDynamicBitField< T >::nents.

Referenced by TLDynamicBitField< T >::TLDynamicBitField().

template<typename T>
nents_t TLDynamicBitField< T >::_NEntsOfN size_t  _N  )  [inline, static, private]
 

Calculate number of entries for passed number of bits.

Definition at line 331 of file tlbitfield.h.

References TLDynamicBitField< T >::nents_t.

Referenced by TLDynamicBitField< T >::_SetVals(), and TLDynamicBitField< T >::resize().

template<typename T>
void TLDynamicBitField< T >::_SetAllEnts val  )  [inline, private]
 

Used to set/clear _all_ bits.

For internal use only.

Definition at line 322 of file tlbitfield.h.

References TLDynamicBitField< T >::bits, TLDynamicBitField< T >::nents, and TLDynamicBitField< T >::nents_t.

Referenced by TLDynamicBitField< T >::ClrAll(), TLDynamicBitField< T >::SetAll(), and TLDynamicBitField< T >::TLDynamicBitField().

template<typename T>
void TLDynamicBitField< T >::_SetVals size_t  _N  )  [inline, private]
 

Set various values.

For internal use only.

Definition at line 334 of file tlbitfield.h.

References TLDynamicBitField< T >::_NEntsOfN(), TLDynamicBitField< T >::exmask, TLDynamicBitField< T >::N, TLDynamicBitField< T >::nents, and uint32.

Referenced by TLDynamicBitField< T >::_Initialize(), and TLDynamicBitField< T >::resize().

template<typename T>
void TLDynamicBitField< T >::AssBit size_t  bit,
bool  val
[inline]
 

Assign bit value; bit in range 0..N-1; no range check!

Definition at line 411 of file tlbitfield.h.

References TLDynamicBitField< T >::ClrBit(), and TLDynamicBitField< T >::SetBit().

Referenced by DoTestBitFields().

template<typename T>
void TLDynamicBitField< T >::ClrAll  )  [inline]
 

Clear all bits (to 0).

Definition at line 418 of file tlbitfield.h.

References TLDynamicBitField< T >::_SetAllEnts(), and TLDynamicBitField< T >::all_clr.

Referenced by DoTestBitFields().

template<typename T>
void TLDynamicBitField< T >::ClrBit size_t  bit  )  [inline]
 

Clear a bit; bit in range 0..N-1; no range check!

Definition at line 405 of file tlbitfield.h.

References TLDynamicBitField< T >::band, TLDynamicBitField< T >::bits, and TLDynamicBitField< T >::bshift.

Referenced by TLDynamicBitField< T >::AssBit(), and DoTestBitFields().

template<typename T>
size_t TLDynamicBitField< T >::CountClr  )  [inline]
 

Count number of bits not set.

Definition at line 431 of file tlbitfield.h.

References TLDynamicBitField< T >::bits, CountBitsCleared(), TLDynamicBitField< T >::exmask, TLDynamicBitField< T >::nents, and TLDynamicBitField< T >::nents_t.

template<typename T>
size_t TLDynamicBitField< T >::CountSet  )  [inline]
 

Count number of bits set.

Definition at line 422 of file tlbitfield.h.

References TLDynamicBitField< T >::bits, CountBitsSet(), TLDynamicBitField< T >::exmask, TLDynamicBitField< T >::nents, and TLDynamicBitField< T >::nents_t.

Referenced by DoTestBitFields().

template<typename T>
bool TLDynamicBitField< T >::GetBit size_t  bit  )  [inline]
 

Query a bit value; bit in range 0..N-1; no range check!

Definition at line 408 of file tlbitfield.h.

References TLDynamicBitField< T >::band, TLDynamicBitField< T >::bits, and TLDynamicBitField< T >::bshift.

Referenced by DoTestBitFields().

template<typename T>
TLDynamicBitField& TLDynamicBitField< T >::operator= const TLDynamicBitField< T > &  b  )  [inline]
 

Assignment operator: copy bit values:.

Definition at line 362 of file tlbitfield.h.

References TLDynamicBitField< T >::_CopyFrom(), and TLDynamicBitField< T >::_Free().

template<typename T>
void TLDynamicBitField< T >::resize size_t  newN,
bool  ini_val
[inline]
 

Resize the bitfield.

Data at the beginning of the bitfield is preserved; new data is initialized with passed value.

Parameters:
newN: new size of the bitfield (number of bits); 0 is allowed.
ini_val: If the new size is larger than the old one, initialize the new bits with this value.

Definition at line 392 of file tlbitfield.h.

References TLDynamicBitField< T >::all_clr, TLDynamicBitField< T >::all_set, TLDynamicBitField< T >::bits, TLDynamicBitField< T >::exmask, TLDynamicBitField< T >::nents, TLDynamicBitField< T >::nents_t, and TLDynamicBitField< T >::resize().

template<typename T>
void TLDynamicBitField< T >::resize size_t  newN  )  [inline]
 

Resize the bitfield.

Data at the beginning of the bitfield is preserved; new data is not initialized. There is another version of this function which will initialize the new data.

Parameters:
newN: new size of the bitfield (number of bits); 0 is allowed.

Definition at line 375 of file tlbitfield.h.

References TLDynamicBitField< T >::_NEntsOfN(), TLDynamicBitField< T >::_SetVals(), TLDynamicBitField< T >::bits, and TLDynamicBitField< T >::nents.

Referenced by TLDynamicBitField< T >::resize().

template<typename T>
ssize_t TLDynamicBitField< T >::SearchFirstClr  )  [inline]
 

Search bit address of first cleared (0) bit in bitfield.

Returns:
Bit address (bit number in range 0..N-1) if found,
or -1 if no cleared bit is present.

Definition at line 458 of file tlbitfield.h.

References TLDynamicBitField< T >::all_set, TLDynamicBitField< T >::bits, TLDynamicBitField< T >::bits_per_ent, TLDynamicBitField< T >::exmask, TLDynamicBitField< T >::nents, TLDynamicBitField< T >::nents_t, SearchFirstClearedBit(), and ssize_t.

Referenced by DoTestBitFields().

template<typename T>
ssize_t TLDynamicBitField< T >::SearchFirstSet  )  [inline]
 

Search bit address of first set (1) bit in bitfield.

Returns:
Bit address (bit number in range 0..N-1) if found,
or -1 if no set bit is present.

Definition at line 444 of file tlbitfield.h.

References TLDynamicBitField< T >::all_clr, TLDynamicBitField< T >::bits, TLDynamicBitField< T >::bits_per_ent, TLDynamicBitField< T >::exmask, TLDynamicBitField< T >::nents, TLDynamicBitField< T >::nents_t, SearchFirstSetBit(), and ssize_t.

Referenced by DoTestBitFields().

template<typename T>
void TLDynamicBitField< T >::SetAll  )  [inline]
 

Set all bits (to 1).

Definition at line 415 of file tlbitfield.h.

References TLDynamicBitField< T >::_SetAllEnts(), and TLDynamicBitField< T >::all_set.

Referenced by DoTestBitFields().

template<typename T>
void TLDynamicBitField< T >::SetBit size_t  bit  )  [inline]
 

Set a bit; bit in range 0..N-1; no range check!

Definition at line 402 of file tlbitfield.h.

References TLDynamicBitField< T >::band, TLDynamicBitField< T >::bits, and TLDynamicBitField< T >::bshift.

Referenced by TLDynamicBitField< T >::AssBit(), and DoTestBitFields().


Friends And Related Function Documentation

template<typename T>
int DoTestBitFields  )  [friend]
 

Definition at line 23 of file test-bitfield.cc.


Member Data Documentation

template<typename T>
const T TLDynamicBitField< T >::all_clr = T(0) [static, private]
 

Constant of type T with all bits cleared.

Definition at line 305 of file tlbitfield.h.

Referenced by TLDynamicBitField< T >::ClrAll(), TLDynamicBitField< T >::resize(), TLDynamicBitField< T >::SearchFirstSet(), and TLDynamicBitField< T >::TLDynamicBitField().

template<typename T>
const T TLDynamicBitField< T >::all_set = ~all_clr [static, private]
 

Constant of type T with all bits set.

Definition at line 307 of file tlbitfield.h.

Referenced by TLDynamicBitField< T >::resize(), TLDynamicBitField< T >::SearchFirstClr(), TLDynamicBitField< T >::SetAll(), and TLDynamicBitField< T >::TLDynamicBitField().

template<typename T>
const T TLDynamicBitField< T >::band = T(8*sizeof(T)-1) [static, private]
 

AND mask for part of bit address stored inside one entry.

Definition at line 293 of file tlbitfield.h.

Referenced by TLDynamicBitField< T >::ClrBit(), DoTestBitFields(), TLDynamicBitField< T >::GetBit(), and TLDynamicBitField< T >::SetBit().

template<typename T>
T* TLDynamicBitField< T >::bits [private]
 

The actual bitfield array [nents].

Definition at line 314 of file tlbitfield.h.

Referenced by TLDynamicBitField< T >::_CopyFrom(), TLDynamicBitField< T >::_Free(), TLDynamicBitField< T >::_Initialize(), TLDynamicBitField< T >::_SetAllEnts(), TLDynamicBitField< T >::ClrBit(), TLDynamicBitField< T >::CountClr(), TLDynamicBitField< T >::CountSet(), TLDynamicBitField< T >::GetBit(), TLDynamicBitField< T >::resize(), TLDynamicBitField< T >::SearchFirstClr(), TLDynamicBitField< T >::SearchFirstSet(), and TLDynamicBitField< T >::SetBit().

template<typename T>
const size_t TLDynamicBitField< T >::bits_per_ent = 8*sizeof(T) [static, private]
 

Number of bits per entry:.

Definition at line 302 of file tlbitfield.h.

Referenced by TLDynamicBitField< T >::SearchFirstClr(), and TLDynamicBitField< T >::SearchFirstSet().

template<typename T>
const int TLDynamicBitField< T >::bshift [static, private]
 

Initial value:

 
            sizeof(T)==1 ? 3 : 
            sizeof(T)==2 ? 4 : 
            sizeof(T)==4 ? 5 : 
            sizeof(T)==8 ? 6 : 
            sizeof(T)==16 ? 7 : 8
Number of bits to shift left to get entry index from bit address.

Definition at line 295 of file tlbitfield.h.

Referenced by TLDynamicBitField< T >::ClrBit(), DoTestBitFields(), TLDynamicBitField< T >::GetBit(), and TLDynamicBitField< T >::SetBit().

template<typename T>
T TLDynamicBitField< T >::exmask [private]
 

This mask contains all excess (unused) bits in bits[nents-1].

Definition at line 319 of file tlbitfield.h.

Referenced by TLDynamicBitField< T >::_CopyFrom(), TLDynamicBitField< T >::_SetVals(), TLDynamicBitField< T >::CountClr(), TLDynamicBitField< T >::CountSet(), DoTestBitFields(), TLDynamicBitField< T >::resize(), TLDynamicBitField< T >::SearchFirstClr(), and TLDynamicBitField< T >::SearchFirstSet().

template<typename T>
size_t TLDynamicBitField< T >::N [private]
 

Number of bits in the bitfield.

Definition at line 310 of file tlbitfield.h.

Referenced by TLDynamicBitField< T >::_CopyFrom(), TLDynamicBitField< T >::_Free(), and TLDynamicBitField< T >::_SetVals().

template<typename T>
nents_t TLDynamicBitField< T >::nents [private]
 

Number of entries in the bitfield array.

Definition at line 312 of file tlbitfield.h.

Referenced by TLDynamicBitField< T >::_CopyFrom(), TLDynamicBitField< T >::_Free(), TLDynamicBitField< T >::_Initialize(), TLDynamicBitField< T >::_SetAllEnts(), TLDynamicBitField< T >::_SetVals(), TLDynamicBitField< T >::CountClr(), TLDynamicBitField< T >::CountSet(), DoTestBitFields(), TLDynamicBitField< T >::resize(), TLDynamicBitField< T >::SearchFirstClr(), and TLDynamicBitField< T >::SearchFirstSet().


The documentation for this class was generated from the following file:
Generated on Sat Feb 19 22:35:50 2005 for Ray by doxygen 1.3.5