]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
rose_build_matchers: simplify literal build
authorJustin Viiret <justin.viiret@intel.com>
Tue, 21 Feb 2017 22:53:09 +0000 (09:53 +1100)
committerMatthew Barr <matthew.barr@intel.com>
Wed, 26 Apr 2017 05:04:31 +0000 (15:04 +1000)
src/rose/rose_build_matchers.cpp

index 3ecec9d8dc14a613abc43ee8f8ee70e1006b3166..1643a06cbd916a5abbeda014e909ec4ff4cc0e8a 100644 (file)
@@ -671,8 +671,6 @@ MatcherProto makeMatcherProto(const RoseBuildImpl &build,
 
         assert(id < build.literal_info.size());
         const rose_literal_info &info = build.literal_info[id];
-        u32 final_id = info.final_id;
-        rose_group groups = info.group_mask;
         /* Note: requires_benefits are handled in the literal entries */
         const ue2_literal &lit = e.second.s;
 
@@ -723,8 +721,8 @@ MatcherProto makeMatcherProto(const RoseBuildImpl &build,
 
         DEBUG_PRINTF("id=%u, s='%s', nocase=%d, noruns=%d, msk=%s, "
                      "cmp=%s\n",
-                     final_id, escapeString(s).c_str(), (int)nocase, noruns,
-                     dumpMask(msk).c_str(), dumpMask(cmp).c_str());
+                     info.fragment_id, escapeString(s).c_str(), (int)nocase,
+                     noruns, dumpMask(msk).c_str(), dumpMask(cmp).c_str());
 
         if (!maskIsConsistent(s, nocase, msk, cmp)) {
             DEBUG_PRINTF("msk/cmp for literal can't match, skipping\n");
@@ -732,20 +730,17 @@ MatcherProto makeMatcherProto(const RoseBuildImpl &build,
         }
 
         mp.accel_lits.emplace_back(lit.get_string(), lit.any_nocase(), msk, cmp,
-                                   groups);
+                                   info.group_mask);
         mp.history_required = max(mp.history_required, lit_hist_len);
-        mp.lits.emplace_back(move(s), nocase, noruns, final_id, groups, msk,
-                             cmp);
-    }
 
-    for (auto &lit : mp.lits) {
-        u32 final_id = lit.id;
-        assert(contains(build.final_to_frag_map, final_id));
-        const auto &frag =
-            build.fragments.at(build.final_to_frag_map.at(final_id));
-        lit.id = delay_rebuild ? frag.delay_program_offset
-                               : frag.lit_program_offset;
-        lit.groups = frag.groups;
+        assert(info.fragment_id < build.fragments.size());
+        const auto &frag = build.fragments.at(info.fragment_id);
+        u32 prog_offset =
+            delay_rebuild ? frag.delay_program_offset : frag.lit_program_offset;
+        const auto &groups = frag.groups;
+
+        mp.lits.emplace_back(move(s), nocase, noruns, prog_offset, groups, msk,
+                             cmp);
     }
 
     sort_and_unique(mp.lits);