1 /*
2  * Copyright (c) 2015-2018, 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 ACCEL_DFA_BUILD_STRAT_H
30 #define ACCEL_DFA_BUILD_STRAT_H
31 
32 #include "rdfa.h"
33 #include "dfa_build_strat.h"
34 #include "ue2common.h"
35 #include "util/accel_scheme.h"
36 
37 #include <map>
38 
39 namespace ue2 {
40 
41 class ReportManager;
42 struct Grey;
43 enum DfaType {
44     McClellan,
45     Sheng,
46     Gough
47 };
48 
49 class accel_dfa_build_strat : public dfa_build_strat {
50 public:
accel_dfa_build_strat(const ReportManager & rm_in,bool only_accel_init_in)51     accel_dfa_build_strat(const ReportManager &rm_in, bool only_accel_init_in)
52         : dfa_build_strat(rm_in), only_accel_init(only_accel_init_in) {}
53     virtual AccelScheme find_escape_strings(dstate_id_t this_idx) const;
54     virtual size_t accelSize(void) const = 0;
55     virtual u32 max_allowed_offset_accel() const = 0;
56     virtual u32 max_stop_char() const = 0;
57     virtual u32 max_floating_stop_char() const = 0;
58     virtual void buildAccel(dstate_id_t this_idx, const AccelScheme &info,
59                             void *accel_out);
60     virtual std::map<dstate_id_t, AccelScheme> getAccelInfo(const Grey &grey);
61     virtual DfaType getType() const = 0;
62 
63 private:
64     bool only_accel_init;
65 };
66 
67 } // namespace ue2
68 
69 #endif // ACCEL_DFA_BUILD_STRAT_H
70