]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
hwlm_literal: coerce nocase lits to upper-case
authorJustin Viiret <justin.viiret@intel.com>
Thu, 21 Apr 2016 04:17:45 +0000 (14:17 +1000)
committerMatthew Barr <matthew.barr@intel.com>
Wed, 18 May 2016 06:22:22 +0000 (16:22 +1000)
src/hwlm/hwlm_literal.cpp
src/hwlm/hwlm_literal.h

index 4d8b43361ec8d245853e68bbb83e009528d77259..9e365a0cd2b4628d3d12ea794f6abb9056bcd8a7 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Intel Corporation
+ * Copyright (c) 2015-2016, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
 #include "util/compare.h" // for ourisalpha
 #include "util/ue2string.h" // for escapeString
 
+#include <algorithm>
 #include <iomanip>
 #include <sstream>
 
-#include <boost/algorithm/cxx11/all_of.hpp>
-
 using namespace std;
-using namespace boost::algorithm;
 
 namespace ue2 {
 
@@ -91,10 +89,17 @@ hwlmLiteral::hwlmLiteral(const std::string &s_in, bool nocase_in,
     assert(msk.size() <= HWLM_MASKLEN);
     assert(msk.size() == cmp.size());
 
-    DEBUG_PRINTF("literal '%s', msk=%s, cmp=%s\n",
-                 escapeString(s).c_str(), dumpMask(msk).c_str(),
+    // If we've been handled a nocase literal, all letter characters must be
+    // upper-case.
+    if (nocase) {
+        upperString(s);
+    }
+
+    DEBUG_PRINTF("literal '%s'%s, msk=%s, cmp=%s\n", escapeString(s).c_str(),
+                 nocase ? " (nocase)" : "", dumpMask(msk).c_str(),
                  dumpMask(cmp).c_str());
 
+
     // Mask and compare vectors MUST be the same size.
     assert(msk.size() == cmp.size());
 
@@ -102,7 +107,7 @@ hwlmLiteral::hwlmLiteral(const std::string &s_in, bool nocase_in,
     assert(maskIsConsistent(s, nocase, msk, cmp));
 
     // In the name of good hygiene, zap msk/cmp if msk is all zeroes.
-    if (all_of_equal(msk.begin(), msk.end(), 0)) {
+    if (all_of(begin(msk), end(msk), [](u8 val) { return val == 0; })) {
         msk.clear();
         cmp.clear();
     }
index ca9695bc53d9fc3a7340c9372d37625688aec98d..7e63a6f32a14ceb3c70d62f9357d8dabe1e48d52 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015, Intel Corporation
+ * Copyright (c) 2015-2016, Intel Corporation
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are met:
@@ -95,11 +95,6 @@ struct hwlmLiteral {
      */
     std::vector<u8> cmp;
 
-    /** \brief Simple constructor: no group information, no msk/cmp. */
-    hwlmLiteral(const std::string &s_in, bool nocase_in, u32 id_in)
-        : s(s_in), id(id_in), nocase(nocase_in), noruns(false),
-          groups(HWLM_ALL_GROUPS), msk(0), cmp(0) {}
-
     /** \brief Complete constructor, takes group information and msk/cmp.
      *
      * This constructor takes a msk/cmp pair. Both must be vectors of length <=
@@ -107,6 +102,10 @@ struct hwlmLiteral {
     hwlmLiteral(const std::string &s_in, bool nocase_in, bool noruns_in,
                 u32 id_in, hwlm_group_t groups_in,
                 const std::vector<u8> &msk_in, const std::vector<u8> &cmp_in);
+
+    /** \brief Simple constructor: no group information, no msk/cmp. */
+    hwlmLiteral(const std::string &s_in, bool nocase_in, u32 id_in)
+        : hwlmLiteral(s_in, nocase_in, false, id_in, HWLM_ALL_GROUPS, {}, {}) {}
 };
 
 /**