From fa27025bcb01b190776d243415ff5351f4b4ddaf Mon Sep 17 00:00:00 2001 From: Justin Viiret Date: Fri, 15 Apr 2016 15:28:23 +1000 Subject: [PATCH] Wrap MPV puffettes in a struct --- src/rose/rose_build_add.cpp | 6 +++--- src/rose/rose_build_bytecode.cpp | 6 +++--- src/rose/rose_build_impl.h | 23 ++++++++++++++++------- src/rose/rose_build_misc.cpp | 8 ++++---- 4 files changed, 26 insertions(+), 17 deletions(-) diff --git a/src/rose/rose_build_add.cpp b/src/rose/rose_build_add.cpp index 7fecaeec..5cf45dcc 100644 --- a/src/rose/rose_build_add.cpp +++ b/src/rose/rose_build_add.cpp @@ -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 */ } diff --git a/src/rose/rose_build_bytecode.cpp b/src/rose/rose_build_bytecode.cpp index 6407f125..1cd150c0 100644 --- a/src/rose/rose_build_bytecode.cpp +++ b/src/rose/rose_build_bytecode.cpp @@ -1294,7 +1294,7 @@ aligned_unique_ptr 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 diff --git a/src/rose/rose_build_impl.h b/src/rose/rose_build_impl.h index 7b59c59e..d2a19f78 100644 --- a/src/rose/rose_build_impl.h +++ b/src/rose/rose_build_impl.h @@ -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 puffettes; + std::vector triggered_puffettes; +}; + struct OutfixInfo { /* TODO: poly */ OutfixInfo() {} explicit OutfixInfo(std::unique_ptr 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 holder; std::unique_ptr rdfa; std::unique_ptr haig; - std::vector puffettes; - std::vector triggered_puffettes; + MpvProto mpv; RevAccInfo rev_info; u32 maxBAWidth = 0; //!< max bi-anchored width diff --git a/src/rose/rose_build_misc.cpp b/src/rose/rose_build_misc.cpp index e5c5b4e6..2904e4ac 100644 --- a/src/rose/rose_build_misc.cpp +++ b/src/rose/rose_build_misc.cpp @@ -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 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); }