mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
Wrap MPV puffettes in a struct
This commit is contained in:
parent
ac31841214
commit
fa27025bcb
@ -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 */
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user