]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
Wrap MPV puffettes in a struct
authorJustin Viiret <justin.viiret@intel.com>
Fri, 15 Apr 2016 05:28:23 +0000 (15:28 +1000)
committerMatthew Barr <matthew.barr@intel.com>
Wed, 20 Apr 2016 03:34:57 +0000 (13:34 +1000)
src/rose/rose_build_add.cpp
src/rose/rose_build_bytecode.cpp
src/rose/rose_build_impl.h
src/rose/rose_build_misc.cpp

index 7fecaeec6ae228ddf533a2382dbd44d86715a4d2..5cf45dcce1099e66ff557f75060ceaadd636709a 100644 (file)
@@ -1780,7 +1780,7 @@ bool RoseBuildImpl::addOutfix(const raw_puff &rp) {
         mpv_outfix->chained = true;
     }
 
-    mpv_outfix->puffettes.push_back(rp);
+    mpv_outfix->mpv.puffettes.push_back(rp);
 
     mpv_outfix->maxBAWidth = ROSE_BOUND_INF; /* not ba */
     mpv_outfix->minWidth = min(mpv_outfix->minWidth, depth(rp.repeats));
@@ -1804,7 +1804,7 @@ bool RoseBuildImpl::addChainTail(const raw_puff &rp, u32 *queue_out,
         mpv_outfix->chained = true;
     }
 
-    mpv_outfix->triggered_puffettes.push_back(rp);
+    mpv_outfix->mpv.triggered_puffettes.push_back(rp);
 
     mpv_outfix->maxBAWidth = ROSE_BOUND_INF; /* not ba */
     mpv_outfix->minWidth = min(mpv_outfix->minWidth, depth(rp.repeats));
@@ -1816,7 +1816,7 @@ bool RoseBuildImpl::addChainTail(const raw_puff &rp, u32 *queue_out,
                                             * the caller */
 
     *queue_out = mpv_outfix->get_queue(qif);
-    *event_out = MQE_TOP_FIRST + mpv_outfix->triggered_puffettes.size() - 1;
+    *event_out = MQE_TOP_FIRST + mpv_outfix->mpv.triggered_puffettes.size() - 1;
 
     return true; /* failure is not yet an option */
 }
index 6407f125ecaa27afc6d1fc5dc0df8c73df2e62ce..1cd150c09ca4592140e841cc9c95764d0c74c093 100644 (file)
@@ -1294,7 +1294,7 @@ aligned_unique_ptr<NFA> buildOutfix(RoseBuildImpl &tbi, OutfixInfo &outfix) {
                 }
             }
         }
-    } else if (!outfix.puffettes.empty()) {
+    } else if (!outfix.mpv.puffettes.empty()) {
         assert(0);
     }
 
@@ -1327,7 +1327,7 @@ void prepMpv(RoseBuildImpl &tbi, build_context &bc, size_t *historyRequired,
     }
 
     assert(mpv->chained);
-    auto nfa = mpvCompile(mpv->puffettes, mpv->triggered_puffettes);
+    auto nfa = mpvCompile(mpv->mpv.puffettes, mpv->mpv.triggered_puffettes);
     assert(nfa);
     if (!nfa) {
         throw CompileError("Unable to generate bytecode.");
@@ -1347,7 +1347,7 @@ void prepMpv(RoseBuildImpl &tbi, build_context &bc, size_t *historyRequired,
     }
 
     add_nfa_to_blob(bc, *nfa);
-    *mpv_as_outfix = !mpv->puffettes.empty();
+    *mpv_as_outfix = !mpv->mpv.puffettes.empty();
 }
 
 static
index 7b59c59e96be7ae425c1a5f43d2d5b8398b25bd3..d2a19f78f9f8a393113537119db005d3644e14a7 100644 (file)
@@ -290,6 +290,18 @@ bool operator<(const simple_anchored_info &a, const simple_anchored_info &b) {
     return 0;
 }
 
+struct MpvProto {
+    bool empty() const {
+        return puffettes.empty() && triggered_puffettes.empty();
+    }
+    void reset() {
+        puffettes.clear();
+        triggered_puffettes.clear();
+    }
+    std::vector<raw_puff> puffettes;
+    std::vector<raw_puff> triggered_puffettes;
+};
+
 struct OutfixInfo { /* TODO: poly */
     OutfixInfo() {}
     explicit OutfixInfo(std::unique_ptr<raw_dfa> r) : rdfa(std::move(r)) {
@@ -310,28 +322,25 @@ struct OutfixInfo { /* TODO: poly */
     }
 
     bool is_nonempty_mpv() const {
-        return !puffettes.empty() || !triggered_puffettes.empty();
+        return !mpv.empty();
     }
 
     bool is_dead() const {
-        return !holder && !rdfa && !haig && puffettes.empty() &&
-               triggered_puffettes.empty();
+        return !holder && !rdfa && !haig && mpv.empty();
     }
 
     void clear() {
         holder.reset();
         rdfa.reset();
         haig.reset();
-        puffettes.clear();
-        triggered_puffettes.clear();
+        mpv.reset();
         assert(is_dead());
     }
 
     std::unique_ptr<NGHolder> holder;
     std::unique_ptr<raw_dfa> rdfa;
     std::unique_ptr<raw_som_dfa> haig;
-    std::vector<raw_puff> puffettes;
-    std::vector<raw_puff> triggered_puffettes;
+    MpvProto mpv;
 
     RevAccInfo rev_info;
     u32 maxBAWidth = 0; //!< max bi-anchored width
index e5c5b4e621483129b511bfdaebbb61563492b647..2904e4acc0f3bb9f278073bd6fe08c5c79b7b8c3 100644 (file)
@@ -631,10 +631,10 @@ RoseDedupeAuxImpl::RoseDedupeAuxImpl(const RoseBuildImpl &tbi_in)
     }
 
     if (tbi.mpv_outfix) {
-        for (const auto &puff : tbi.mpv_outfix->puffettes) {
+        for (const auto &puff : tbi.mpv_outfix->mpv.puffettes) {
             puff_map[puff.report].insert(&puff);
         }
-        for (const auto &puff : tbi.mpv_outfix->triggered_puffettes) {
+        for (const auto &puff : tbi.mpv_outfix->mpv.triggered_puffettes) {
             puff_map[puff.report].insert(&puff);
         }
     }
@@ -886,10 +886,10 @@ set<ReportID> all_reports(const OutfixInfo &outfix) {
         insert(&reports, all_reports(*outfix.haig));
     }
 
-    for (const auto &puff : outfix.puffettes) {
+    for (const auto &puff : outfix.mpv.puffettes) {
         reports.insert(puff.report);
     }
-    for (const auto &puff : outfix.triggered_puffettes) {
+    for (const auto &puff : outfix.mpv.triggered_puffettes) {
         reports.insert(puff.report);
     }