1/*
2 * Copyright (c) 2017, Intel Corporation
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
6 *
7 * * Redistributions of source code must retain the above copyright notice,
8 * this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of Intel Corporation nor the names of its contributors
13 * may be used to endorse or promote products derived from this software
14 * without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#ifndef ROSE_BUILD_LIT_ACCEL_H
30#define ROSE_BUILD_LIT_ACCEL_H
31
32#include "hwlm/hwlm.h"
33
34#include <string>
35#include <tuple>
36#include <utility>
37#include <vector>
38
39struct HWLM;
40
41namespace ue2 {
42
43struct AccelString {
44 AccelString(std::string s_in, bool nocase_in, std::vector<u8> msk_in,
45 std::vector<u8> cmp_in, hwlm_group_t groups_in)
46 : s(std::move(s_in)), nocase(nocase_in), msk(std::move(msk_in)),
47 cmp(std::move(cmp_in)), groups(groups_in) {}
48
49 std::string s;
50 bool nocase;
51 std::vector<u8> msk;
52 std::vector<u8> cmp;
53 hwlm_group_t groups;
54
55 bool operator==(const AccelString &a) const {
56 return s == a.s && nocase == a.nocase && msk == a.msk && cmp == a.cmp &&
57 groups == a.groups;
58 }
59
60 bool operator<(const AccelString &a) const {
61 return std::tie(s, nocase, msk, cmp, groups) <
62 std::tie(a.s, a.nocase, a.msk, a.cmp, a.groups);
63 }
64};
65
66void buildForwardAccel(HWLM *h, const std::vector<AccelString> &lits,
67 hwlm_group_t expected_groups);
68
69} // namespace ue2
70
71#endif // ROSE_BUILD_LIT_ACCEL_H
72