/*
- * 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 {
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());
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();
}
/*
- * 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:
*/
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 <=
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, {}, {}) {}
};
/**