From: Francesco Chemolli Date: Mon, 16 Dec 2013 21:58:50 +0000 (+0100) Subject: Moved CharacterSet's backing storage to std::vector to gain speed at the... X-Git-Tag: SQUID_3_5_0_1~456^2~7 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0e4d80e4b85b613f5c8d709b2160523b796ad54f;p=thirdparty%2Fsquid.git Moved CharacterSet's backing storage to std::vector to gain speed at the expense of space. Improved CharacterSet's constructor Made CharacterSet's name parameter optional with default value. --- diff --git a/src/base/CharacterSet.h b/src/base/CharacterSet.h index 3c11d69388..49f767ef7c 100644 --- a/src/base/CharacterSet.h +++ b/src/base/CharacterSet.h @@ -3,27 +3,32 @@ #include +/// Optimized set of C chars, with quick membership test and merge support class CharacterSet { public: - CharacterSet(const char *label, const char * const c) : name(label), chars_(std::vector(256,false)) { - size_t clen = strlen(c); + typedef std::vector vector_type; + + CharacterSet(const char *label, const char * const c) + : name(label == NULL ? "anonymous" : label), chars_(vector_type(256,0)) + { + const size_t clen = strlen(c); for (size_t i = 0; i < clen; ++i) - chars_[static_cast(c[i])] = true; + add(c[i]); } /// whether a given character exists in the set bool operator[](unsigned char c) const {return chars_[static_cast(c)];} - /// add a given char to the character set. c must be >= 0. + /// add a given char to the character set. CharacterSet & add(const unsigned char c) {chars_[static_cast(c)] = true; return *this; } /// add all characters from the given CharacterSet to this one const CharacterSet &operator +=(const CharacterSet &src) { //precondition: src.chars_.size() == chars_.size() - std::vector::const_iterator s = src.chars_.begin(); - const std::vector::const_iterator e = src.chars_.end(); - std::vector::iterator d = chars_.begin(); + vector_type::const_iterator s = src.chars_.begin(); + const vector_type::const_iterator e = src.chars_.end(); + vector_type::iterator d = chars_.begin(); while (s != e) { if (*s) *d = true; @@ -33,12 +38,12 @@ public: return *this; } - /// name of this character set + /// optional set label fdebugging (default: "anonymous") const char * name; private: - /// characters defined in this set - std::vector chars_; //std::vector is optimized + /// characters present in this set + vector_type chars_; }; #endif /* _SQUID_SRC_PARSER_CHARACTERSET_H */