]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Moved CharacterSet's backing storage to std::vector<uint8_t> to gain speed at the...
authorFrancesco Chemolli <kinkie@squid-cache.org>
Mon, 16 Dec 2013 21:58:50 +0000 (22:58 +0100)
committerFrancesco Chemolli <kinkie@squid-cache.org>
Mon, 16 Dec 2013 21:58:50 +0000 (22:58 +0100)
Improved CharacterSet's constructor
Made CharacterSet's name parameter optional with default value.

src/base/CharacterSet.h

index 3c11d69388957e6dad7544fa7bb0d78cefb13be6..49f767ef7c489eecad91502af23ad629c03b5743 100644 (file)
@@ -3,27 +3,32 @@
 
 #include <vector>
 
+/// 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<bool>(256,false)) {
-        size_t clen = strlen(c);
+    typedef std::vector<uint8_t> 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<uint8_t>(c[i])] = true;
+            add(c[i]);
     }
 
     /// whether a given character exists in the set
     bool operator[](unsigned char c) const {return chars_[static_cast<uint8_t>(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<uint8_t>(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<bool>::const_iterator s = src.chars_.begin();
-        const std::vector<bool>::const_iterator e = src.chars_.end();
-        std::vector<bool>::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<bool> chars_; //std::vector<bool> is optimized
+    /// characters present in this set
+   vector_type chars_;
 };
 
 #endif /* _SQUID_SRC_PARSER_CHARACTERSET_H */