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));
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));
* 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 */
}
}
}
}
- } else if (!outfix.puffettes.empty()) {
+ } else if (!outfix.mpv.puffettes.empty()) {
assert(0);
}
}
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.");
}
add_nfa_to_blob(bc, *nfa);
- *mpv_as_outfix = !mpv->puffettes.empty();
+ *mpv_as_outfix = !mpv->mpv.puffettes.empty();
}
static
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)) {
}
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
}
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);
}
}
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);
}