/** \brief Construct a Noodle matcher for the given literal. */ aligned_unique_ptr<noodTable> noodBuildTable(const u8 *lit, size_t len, bool nocase, u32 id) { size_t noodle_len = sizeof(noodTable) + len; aligned_unique_ptr<noodTable> n = aligned_zmalloc_unique<noodTable>(noodle_len); assert(n); size_t key_offset = findNoodFragOffset(lit, len, nocase); n->id = id; n->len = verify_u32(len); n->key_offset = verify_u32(key_offset); n->nocase = nocase ? 1 : 0; memcpy(n->str, lit, len); return n; }
aligned_unique_ptr<noodTable> noodBuildTable(const hwlmLiteral &lit) { if (!lit.msk.empty()) { DEBUG_PRINTF("noodle can't handle supplementary masks\n"); return nullptr; } const auto &s = lit.s; size_t noodle_len = sizeof(noodTable) + s.length(); auto n = aligned_zmalloc_unique<noodTable>(noodle_len); assert(n); size_t key_offset = findNoodFragOffset(lit); n->id = lit.id; n->len = verify_u32(s.length()); n->key_offset = verify_u32(key_offset); n->nocase = lit.nocase ? 1 : 0; memcpy(n->str, s.c_str(), s.length()); return n; }