|
|||
|
|||
|
#include <hashcomp.h>
Inheritance diagram for irc::dynamicbitmask:


Public Member Functions | |
| dynamicbitmask () | |
| Allocate the initial memory for bits and freebits and zero the memory. | |
| virtual | ~dynamicbitmask () |
| Free the memory used by bits and freebits. | |
| bitfield | Allocate () |
| Allocate an irc::bitfield. | |
| bool | Deallocate (bitfield &pos) |
| Deallocate an irc::bitfield. | |
| void | Toggle (bitfield &pos, bool state) |
| Toggle the value of a bitfield. | |
| bool | Get (bitfield &pos) |
| Get the value of a bitfield. | |
| unsigned char | GetSize () |
| Return the size in bytes allocated to the bits array. | |
| virtual unsigned char * | GetFreeBits () |
| Get free bits mask. | |
| virtual void | SetFreeBits (unsigned char *freebits) |
| Set free bits mask. | |
Protected Attributes | |
| unsigned char | bits_size |
| Current set size (size of freebits and bits). | |
Private Attributes | |
| unsigned char * | bits |
| Data bits. | |
It starts off at 32 bits in size, large enough to hold 32 boolean values, with a memory allocation of 8 bytes. If you allocate more than 32 bits, the class will grow the bitmap by 8 bytes at a time for each set of 8 bitfields you allocate with the Allocate() method.
This method is designed so that multiple modules can be allocated bit values in a bitmap dynamically, rather than having to define costs in a fixed size unsigned integer and having the possibility of collisions of values in different third party modules.
IMPORTANT NOTE:
To use this class, you must derive from it. This is because each derived instance has its own freebits array which can determine what bitfields are allocated on a TYPE BY TYPE basis, e.g. an irc::dynamicbitmask type for Users, and one for Channels, etc. You should inheret it in a very simple way as follows. The base class will resize and maintain freebits as required, you are just required to make the pointer static and specific to this class type.
class mydbitmask : public irc::dynamicbitmask { private: static unsigned char* freebits; public: mydbitmask() : irc::dynamicbitmask() { freebits = new unsigned char[this->bits_size]; memset(freebits, 0, this->bits_size); } ~mydbitmask() { delete[] freebits; } unsigned char* GetFreeBits() { return freebits; } void SetFreeBits(unsigned char* freebt) { freebits = freebt; } };
Definition at line 494 of file hashcomp.h.
|
|
Allocate the initial memory for bits and freebits and zero the memory.
Definition at line 504 of file hashcomp.cpp. |
|
|
Free the memory used by bits and freebits.
Definition at line 514 of file hashcomp.cpp. References bits. |
|
|
Allocate an irc::bitfield.
Definition at line 520 of file hashcomp.cpp. References bits, bits_size, GetFreeBits(), and SetFreeBits(). |
|
|
Deallocate an irc::bitfield.
Definition at line 577 of file hashcomp.cpp. References bits_size, and GetFreeBits(). |
|
|
Get the value of a bitfield.
Definition at line 612 of file hashcomp.cpp. |
|
|
Get free bits mask.
Definition at line 560 of file hashcomp.h. Referenced by Allocate(), and Deallocate(). |
|
|
Return the size in bytes allocated to the bits array. Note that the actual allocation is twice this, as there are an equal number of bytes allocated for the freebits array. Definition at line 625 of file hashcomp.cpp. References bits_size. |
|
|
Set free bits mask.
Definition at line 564 of file hashcomp.h. Referenced by Allocate(). |
|
||||||||||||
|
Toggle the value of a bitfield.
Definition at line 598 of file hashcomp.cpp. |
|
|
Data bits. We start with four of these, and we grow the bitfield as we allocate more than 32 entries with Allocate(). Definition at line 501 of file hashcomp.h. Referenced by Allocate(), dynamicbitmask(), Get(), Toggle(), and ~dynamicbitmask(). |
|
|
Current set size (size of freebits and bits). Both freebits and bits will ALWAYS be the same length. Definition at line 507 of file hashcomp.h. Referenced by Allocate(), Deallocate(), dynamicbitmask(), Get(), GetSize(), and Toggle(). |