Wrap MPV puffettes in a struct

This commit is contained in:
Justin Viiret 2016-04-15 15:28:23 +10:00 committed by Matthew Barr
parent ac31841214
commit fa27025bcb
4 changed files with 26 additions and 17 deletions

View 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 */
}

View 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

View 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

View 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);
}