Пример #1
0
/** \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;
}
Пример #2
0
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;
}