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->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->maxBAWidth = ROSE_BOUND_INF; /* not ba */
|
||||||
mpv_outfix->minWidth = min(mpv_outfix->minWidth, depth(rp.repeats));
|
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->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->maxBAWidth = ROSE_BOUND_INF; /* not ba */
|
||||||
mpv_outfix->minWidth = min(mpv_outfix->minWidth, depth(rp.repeats));
|
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 */
|
* the caller */
|
||||||
|
|
||||||
*queue_out = mpv_outfix->get_queue(qif);
|
*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 */
|
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);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1327,7 +1327,7 @@ void prepMpv(RoseBuildImpl &tbi, build_context &bc, size_t *historyRequired,
|
|||||||
}
|
}
|
||||||
|
|
||||||
assert(mpv->chained);
|
assert(mpv->chained);
|
||||||
auto nfa = mpvCompile(mpv->puffettes, mpv->triggered_puffettes);
|
auto nfa = mpvCompile(mpv->mpv.puffettes, mpv->mpv.triggered_puffettes);
|
||||||
assert(nfa);
|
assert(nfa);
|
||||||
if (!nfa) {
|
if (!nfa) {
|
||||||
throw CompileError("Unable to generate bytecode.");
|
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);
|
add_nfa_to_blob(bc, *nfa);
|
||||||
*mpv_as_outfix = !mpv->puffettes.empty();
|
*mpv_as_outfix = !mpv->mpv.puffettes.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
|
@ -290,6 +290,18 @@ bool operator<(const simple_anchored_info &a, const simple_anchored_info &b) {
|
|||||||
return 0;
|
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 */
|
struct OutfixInfo { /* TODO: poly */
|
||||||
OutfixInfo() {}
|
OutfixInfo() {}
|
||||||
explicit OutfixInfo(std::unique_ptr<raw_dfa> r) : rdfa(std::move(r)) {
|
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 {
|
bool is_nonempty_mpv() const {
|
||||||
return !puffettes.empty() || !triggered_puffettes.empty();
|
return !mpv.empty();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool is_dead() const {
|
bool is_dead() const {
|
||||||
return !holder && !rdfa && !haig && puffettes.empty() &&
|
return !holder && !rdfa && !haig && mpv.empty();
|
||||||
triggered_puffettes.empty();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear() {
|
void clear() {
|
||||||
holder.reset();
|
holder.reset();
|
||||||
rdfa.reset();
|
rdfa.reset();
|
||||||
haig.reset();
|
haig.reset();
|
||||||
puffettes.clear();
|
mpv.reset();
|
||||||
triggered_puffettes.clear();
|
|
||||||
assert(is_dead());
|
assert(is_dead());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<NGHolder> holder;
|
std::unique_ptr<NGHolder> holder;
|
||||||
std::unique_ptr<raw_dfa> rdfa;
|
std::unique_ptr<raw_dfa> rdfa;
|
||||||
std::unique_ptr<raw_som_dfa> haig;
|
std::unique_ptr<raw_som_dfa> haig;
|
||||||
std::vector<raw_puff> puffettes;
|
MpvProto mpv;
|
||||||
std::vector<raw_puff> triggered_puffettes;
|
|
||||||
|
|
||||||
RevAccInfo rev_info;
|
RevAccInfo rev_info;
|
||||||
u32 maxBAWidth = 0; //!< max bi-anchored width
|
u32 maxBAWidth = 0; //!< max bi-anchored width
|
||||||
|
@ -631,10 +631,10 @@ RoseDedupeAuxImpl::RoseDedupeAuxImpl(const RoseBuildImpl &tbi_in)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (tbi.mpv_outfix) {
|
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);
|
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);
|
puff_map[puff.report].insert(&puff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -886,10 +886,10 @@ set<ReportID> all_reports(const OutfixInfo &outfix) {
|
|||||||
insert(&reports, all_reports(*outfix.haig));
|
insert(&reports, all_reports(*outfix.haig));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto &puff : outfix.puffettes) {
|
for (const auto &puff : outfix.mpv.puffettes) {
|
||||||
reports.insert(puff.report);
|
reports.insert(puff.report);
|
||||||
}
|
}
|
||||||
for (const auto &puff : outfix.triggered_puffettes) {
|
for (const auto &puff : outfix.mpv.triggered_puffettes) {
|
||||||
reports.insert(puff.report);
|
reports.insert(puff.report);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user