From da23e8306afda2d5d4706296da177ce9089987a8 Mon Sep 17 00:00:00 2001 From: Justin Viiret Date: Wed, 2 Dec 2015 10:39:32 +1100 Subject: [PATCH] assignDkeys: use flat_set, not set --- src/nfa/castlecompile.cpp | 3 ++- src/nfa/castlecompile.h | 4 +++- src/rose/rose_build.h | 5 +++-- src/rose/rose_build_misc.cpp | 17 +++++++++-------- src/util/report_manager.cpp | 6 +++--- 5 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/nfa/castlecompile.cpp b/src/nfa/castlecompile.cpp index 7d37ef81..32dc8f24 100644 --- a/src/nfa/castlecompile.cpp +++ b/src/nfa/castlecompile.cpp @@ -894,7 +894,8 @@ bool is_equal(const CastleProto &c1, const CastleProto &c2) { return c1.repeats == c2.repeats; } -bool requiresDedupe(const CastleProto &proto, const set &reports) { +bool requiresDedupe(const CastleProto &proto, + const ue2::flat_set &reports) { ue2::unordered_set seen; for (const PureRepeat &pr : proto.repeats | map_values) { for (const ReportID &report : pr.reports) { diff --git a/src/nfa/castlecompile.h b/src/nfa/castlecompile.h index a35f229d..bb5eff59 100644 --- a/src/nfa/castlecompile.h +++ b/src/nfa/castlecompile.h @@ -38,6 +38,7 @@ #include "nfagraph/ng_repeat.h" #include "util/alloc.h" #include "util/depth.h" +#include "util/ue2_containers.h" #include #include @@ -135,7 +136,8 @@ bool is_equal(const CastleProto &c1, const CastleProto &c2); * \brief True if the given castle contains more than a single instance of any * of the reports in the given set. */ -bool requiresDedupe(const CastleProto &proto, const std::set &reports); +bool requiresDedupe(const CastleProto &proto, + const ue2::flat_set &reports); /** * \brief Build an NGHolder from a CastleProto. diff --git a/src/rose/rose_build.h b/src/rose/rose_build.h index 1a1fc223..bef2114f 100644 --- a/src/rose/rose_build.h +++ b/src/rose/rose_build.h @@ -42,6 +42,7 @@ #include "rose_in_graph.h" #include "util/alloc.h" #include "util/charreach.h" +#include "util/ue2_containers.h" #include "util/ue2string.h" #include @@ -72,8 +73,8 @@ public: /** \brief True if we can not establish that at most a single callback will * be generated at a given offset from this set of reports. */ - virtual bool requiresDedupeSupport(const std::set &reports) const - = 0; + virtual bool requiresDedupeSupport(const ue2::flat_set &reports) + const = 0; }; /** \brief Abstract interface intended for callers from elsewhere in the tree, diff --git a/src/rose/rose_build_misc.cpp b/src/rose/rose_build_misc.cpp index b8775912..e54c0370 100644 --- a/src/rose/rose_build_misc.cpp +++ b/src/rose/rose_build_misc.cpp @@ -538,7 +538,7 @@ u32 RoseBuildImpl::getNewLiteralId() { } static -bool requiresDedupe(const NGHolder &h, const set &reports, +bool requiresDedupe(const NGHolder &h, const ue2::flat_set &reports, const Grey &grey) { /* TODO: tighten */ NFAVertex seen_vert = NFAGraph::null_vertex(); @@ -581,13 +581,14 @@ bool requiresDedupe(const NGHolder &h, const set &reports, class RoseDedupeAuxImpl : public RoseDedupeAux { public: explicit RoseDedupeAuxImpl(const RoseBuildImpl &tbi_in); - bool requiresDedupeSupport(const set &reports) const override; + bool requiresDedupeSupport( + const ue2::flat_set &reports) const override; const RoseBuildImpl &tbi; - map > vert_map; - map > suffix_map; - map > outfix_map; - map > puff_map; + map> vert_map; + map> suffix_map; + map> outfix_map; + map> puff_map; }; unique_ptr RoseBuildImpl::generateDedupeAux() const { @@ -644,8 +645,8 @@ RoseDedupeAuxImpl::RoseDedupeAuxImpl(const RoseBuildImpl &tbi_in) } } -bool RoseDedupeAuxImpl::requiresDedupeSupport(const set &reports) - const { +bool RoseDedupeAuxImpl::requiresDedupeSupport( + const ue2::flat_set &reports) const { /* TODO: this could be expanded to check for offset or character constraints */ diff --git a/src/util/report_manager.cpp b/src/util/report_manager.cpp index eacef005..425f166d 100644 --- a/src/util/report_manager.cpp +++ b/src/util/report_manager.cpp @@ -128,11 +128,9 @@ vector ReportManager::getDkeyToReportTable() const { } void ReportManager::assignDkeys(const RoseBuild *rose) { - unique_ptr dedupe = rose->generateDedupeAux(); - DEBUG_PRINTF("assigning...\n"); - map> ext_to_int; + map> ext_to_int; for (u32 i = 0; i < reportIds.size(); i++) { const Report &ir = reportIds[i]; @@ -143,6 +141,8 @@ void ReportManager::assignDkeys(const RoseBuild *rose) { } } + auto dedupe = rose->generateDedupeAux(); + for (const auto &m : ext_to_int) { u32 ext = m.first;