aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/hyperscan/src/hwlm/noodle_build.cpp
diff options
context:
space:
mode:
authorIvan Blinkov <ivan@blinkov.ru>2022-02-10 16:47:11 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:47:11 +0300
commit5b283123c882433dafbaf6b338adeea16c1a0ea0 (patch)
tree339adc63bce23800021202ae4a8328a843dc447a /contrib/libs/hyperscan/src/hwlm/noodle_build.cpp
parent1aeb9a455974457866f78722ad98114bafc84e8a (diff)
downloadydb-5b283123c882433dafbaf6b338adeea16c1a0ea0.tar.gz
Restoring authorship annotation for Ivan Blinkov <ivan@blinkov.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/hyperscan/src/hwlm/noodle_build.cpp')
-rw-r--r--contrib/libs/hyperscan/src/hwlm/noodle_build.cpp184
1 files changed, 92 insertions, 92 deletions
diff --git a/contrib/libs/hyperscan/src/hwlm/noodle_build.cpp b/contrib/libs/hyperscan/src/hwlm/noodle_build.cpp
index 4bd3af0103..a0128d0ad7 100644
--- a/contrib/libs/hyperscan/src/hwlm/noodle_build.cpp
+++ b/contrib/libs/hyperscan/src/hwlm/noodle_build.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015-2017, Intel Corporation
+ * Copyright (c) 2015-2017, Intel Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
@@ -26,53 +26,53 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-/**
- * \file
+/**
+ * \file
* \brief Noodle literal matcher: build code.
*/
#include "noodle_build.h"
-
-#include "hwlm_literal.h"
+
+#include "hwlm_literal.h"
#include "noodle_internal.h"
-#include "util/bitutils.h"
+#include "util/bitutils.h"
#include "util/compare.h"
#include "util/verify_types.h"
-#include "ue2common.h"
+#include "ue2common.h"
+
+#include <cstring> // for memcpy
+#include <vector>
+
+using std::vector;
-#include <cstring> // for memcpy
-#include <vector>
-
-using std::vector;
-
namespace ue2 {
static
-u64a make_u64a_mask(const vector<u8> &v) {
- assert(v.size() <= sizeof(u64a));
- if (v.size() > sizeof(u64a)) {
- throw std::exception();
- }
-
- u64a mask = 0;
- size_t len = v.size();
- unsigned char *m = (unsigned char *)&mask;
- DEBUG_PRINTF("making mask len %zu\n", len);
- memcpy(m, &v[0], len);
- return mask;
-}
-
-static
-size_t findNoodFragOffset(const hwlmLiteral &lit) {
- const auto &s = lit.s;
- const size_t len = lit.s.length();
-
+u64a make_u64a_mask(const vector<u8> &v) {
+ assert(v.size() <= sizeof(u64a));
+ if (v.size() > sizeof(u64a)) {
+ throw std::exception();
+ }
+
+ u64a mask = 0;
+ size_t len = v.size();
+ unsigned char *m = (unsigned char *)&mask;
+ DEBUG_PRINTF("making mask len %zu\n", len);
+ memcpy(m, &v[0], len);
+ return mask;
+}
+
+static
+size_t findNoodFragOffset(const hwlmLiteral &lit) {
+ const auto &s = lit.s;
+ const size_t len = lit.s.length();
+
size_t offset = 0;
for (size_t i = 0; i + 1 < len; i++) {
int diff = 0;
- const char c = s[i];
- const char d = s[i + 1];
- if (lit.nocase && ourisalpha(c)) {
+ const char c = s[i];
+ const char d = s[i + 1];
+ if (lit.nocase && ourisalpha(c)) {
diff = (mytoupper(c) != mytoupper(d));
} else {
diff = (c != d);
@@ -85,60 +85,60 @@ size_t findNoodFragOffset(const hwlmLiteral &lit) {
return offset;
}
-bytecode_ptr<noodTable> noodBuildTable(const hwlmLiteral &lit) {
- const auto &s = lit.s;
-
- size_t mask_len = std::max(s.length(), lit.msk.size());
- DEBUG_PRINTF("mask is %zu bytes\n", lit.msk.size());
- assert(mask_len <= 8);
- assert(lit.msk.size() == lit.cmp.size());
-
- vector<u8> n_msk(mask_len);
- vector<u8> n_cmp(mask_len);
-
- for (unsigned i = mask_len - lit.msk.size(), j = 0; i < mask_len;
- i++, j++) {
- DEBUG_PRINTF("m[%u] %hhx c[%u] %hhx\n", i, lit.msk[j], i, lit.cmp[j]);
- n_msk[i] = lit.msk[j];
- n_cmp[i] = lit.cmp[j];
- }
-
- size_t s_off = mask_len - s.length();
- for (unsigned i = s_off; i < mask_len; i++) {
- u8 c = s[i - s_off];
- u8 si_msk = lit.nocase && ourisalpha(c) ? (u8)CASE_CLEAR : (u8)0xff;
- n_msk[i] |= si_msk;
- n_cmp[i] |= c & si_msk;
- assert((n_cmp[i] & si_msk) == c);
- DEBUG_PRINTF("m[%u] %hhx c[%u] %hhx '%c'\n", i, n_msk[i], i, n_cmp[i],
- ourisprint(c) ? (char)c : '.');
- }
-
- auto n = make_zeroed_bytecode_ptr<noodTable>(sizeof(noodTable));
+bytecode_ptr<noodTable> noodBuildTable(const hwlmLiteral &lit) {
+ const auto &s = lit.s;
+
+ size_t mask_len = std::max(s.length(), lit.msk.size());
+ DEBUG_PRINTF("mask is %zu bytes\n", lit.msk.size());
+ assert(mask_len <= 8);
+ assert(lit.msk.size() == lit.cmp.size());
+
+ vector<u8> n_msk(mask_len);
+ vector<u8> n_cmp(mask_len);
+
+ for (unsigned i = mask_len - lit.msk.size(), j = 0; i < mask_len;
+ i++, j++) {
+ DEBUG_PRINTF("m[%u] %hhx c[%u] %hhx\n", i, lit.msk[j], i, lit.cmp[j]);
+ n_msk[i] = lit.msk[j];
+ n_cmp[i] = lit.cmp[j];
+ }
+
+ size_t s_off = mask_len - s.length();
+ for (unsigned i = s_off; i < mask_len; i++) {
+ u8 c = s[i - s_off];
+ u8 si_msk = lit.nocase && ourisalpha(c) ? (u8)CASE_CLEAR : (u8)0xff;
+ n_msk[i] |= si_msk;
+ n_cmp[i] |= c & si_msk;
+ assert((n_cmp[i] & si_msk) == c);
+ DEBUG_PRINTF("m[%u] %hhx c[%u] %hhx '%c'\n", i, n_msk[i], i, n_cmp[i],
+ ourisprint(c) ? (char)c : '.');
+ }
+
+ auto n = make_zeroed_bytecode_ptr<noodTable>(sizeof(noodTable));
assert(n);
- DEBUG_PRINTF("size of nood %zu\n", sizeof(noodTable));
-
- size_t key_offset = findNoodFragOffset(lit);
-
- n->id = lit.id;
- n->single = s.length() == 1 ? 1 : 0;
- n->key_offset = verify_u8(s.length() - key_offset);
- n->nocase = lit.nocase ? 1 : 0;
- n->key0 = s[key_offset];
- if (n->single) {
- n->key1 = 0;
- } else {
- n->key1 = s[key_offset + 1];
- }
- n->msk = make_u64a_mask(n_msk);
- n->cmp = make_u64a_mask(n_cmp);
- n->msk_len = mask_len;
+ DEBUG_PRINTF("size of nood %zu\n", sizeof(noodTable));
+
+ size_t key_offset = findNoodFragOffset(lit);
+
+ n->id = lit.id;
+ n->single = s.length() == 1 ? 1 : 0;
+ n->key_offset = verify_u8(s.length() - key_offset);
+ n->nocase = lit.nocase ? 1 : 0;
+ n->key0 = s[key_offset];
+ if (n->single) {
+ n->key1 = 0;
+ } else {
+ n->key1 = s[key_offset + 1];
+ }
+ n->msk = make_u64a_mask(n_msk);
+ n->cmp = make_u64a_mask(n_cmp);
+ n->msk_len = mask_len;
return n;
}
-size_t noodSize(const noodTable *) {
- return sizeof(noodTable);
+size_t noodSize(const noodTable *) {
+ return sizeof(noodTable);
}
} // namespace ue2
@@ -150,17 +150,17 @@ namespace ue2 {
void noodPrintStats(const noodTable *n, FILE *f) {
fprintf(f, "Noodle table\n");
- fprintf(f, "Key Offset: %u\n", n->key_offset);
- fprintf(f, "Msk: %llx Cmp: %llx MskLen %u\n",
- n->msk >> 8 * (8 - n->msk_len), n->cmp >> 8 * (8 - n->msk_len),
- n->msk_len);
+ fprintf(f, "Key Offset: %u\n", n->key_offset);
+ fprintf(f, "Msk: %llx Cmp: %llx MskLen %u\n",
+ n->msk >> 8 * (8 - n->msk_len), n->cmp >> 8 * (8 - n->msk_len),
+ n->msk_len);
fprintf(f, "String: ");
- for (u32 i = 0; i < n->msk_len; i++) {
- const u8 *m = (const u8 *)&n->cmp;
- if (isgraph(m[i]) && m[i] != '\\') {
- fprintf(f, "%c", m[i]);
+ for (u32 i = 0; i < n->msk_len; i++) {
+ const u8 *m = (const u8 *)&n->cmp;
+ if (isgraph(m[i]) && m[i] != '\\') {
+ fprintf(f, "%c", m[i]);
} else {
- fprintf(f, "\\x%02hhx", m[i]);
+ fprintf(f, "\\x%02hhx", m[i]);
}
}
fprintf(f, "\n");