X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=include%2Fhashcomp.h;h=2d6be15a9be097d09d40c2f0e362fde5bf3991fa;hb=5e9a6b9186a8cbaaf65ae7d9cd9c0c033c91b497;hp=bf1996fac5734c946868574396071ce4d817ebb9;hpb=8827eca1daf82ac647a87b10f2aa1104faf17ef9;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/hashcomp.h b/include/hashcomp.h index bf1996fac..2d6be15a9 100644 --- a/include/hashcomp.h +++ b/include/hashcomp.h @@ -2,12 +2,9 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd is copyright (C) 2002-2006 ChatSpike-Dev. - * E-mail: - * - * + * InspIRCd: (C) 2002-2007 InspIRCd Development Team + * See: http://www.inspircd.org/wiki/index.php/Credits * - * Written by Craig Edwards, Craig McLure, and others. * This program is free but copyrighted software; see * the file COPYING for details. * @@ -378,6 +375,49 @@ namespace irc * 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 userrecs, and one for + * chanrecs, 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. + * + * \code + * 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; + * } + * }; + * \endcode */ class dynamicbitmask : public classbase { @@ -387,17 +427,12 @@ namespace irc * more than 32 entries with Allocate(). */ unsigned char* bits; - /** A bitmask containing 1's for allocated - * bits and 0's for free bits. When we - * allocate a bit using Allocate(), we OR - * its position in here to 1. - */ - unsigned char* freebits; + protected: /** Current set size (size of freebits and bits). * Both freebits and bits will ALWAYS be the * same length. */ - size_t bits_size; + unsigned char bits_size; public: /** Allocate the initial memory for bits and * freebits and zero the memory. @@ -406,7 +441,7 @@ namespace irc /** Free the memory used by bits and freebits */ - ~dynamicbitmask(); + virtual ~dynamicbitmask(); /** Allocate an irc::bitfield. * @return An irc::bitfield which can be used @@ -446,7 +481,11 @@ namespace irc * as there are an equal number of bytes allocated * for the freebits array. */ - size_t GetSize(); + unsigned char GetSize(); + + virtual unsigned char* GetFreeBits() { return NULL; } + + virtual void SetFreeBits(unsigned char* freebits) { } }; /** The irc_char_traits class is used for RFC-style comparison of strings. @@ -482,7 +521,7 @@ namespace irc */ typedef basic_string > string; - const char* Spacify(char* n); + const char* Spacify(const char* n); } /* Define operators for using >> and << with irc::string to an ostream on an istream. */ @@ -499,4 +538,17 @@ irc::string operator+ (irc::string& leftval, std::string& rightval); bool operator== (std::string& leftval, irc::string& rightval); bool operator== (irc::string& leftval, std::string& rightval); +std::string assign(const irc::string &other); +irc::string assign(const std::string &other); + +namespace nspace +{ + /** Hashing function to hash irc::string + */ + template<> struct hash + { + size_t operator()(const irc::string &s) const; + }; +} + #endif