]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
assignDkeys: use flat_set<ReportID>, not set
authorJustin Viiret <justin.viiret@intel.com>
Tue, 1 Dec 2015 23:39:32 +0000 (10:39 +1100)
committerMatthew Barr <matthew.barr@intel.com>
Sun, 6 Dec 2015 22:38:32 +0000 (09:38 +1100)
src/nfa/castlecompile.cpp
src/nfa/castlecompile.h
src/rose/rose_build.h
src/rose/rose_build_misc.cpp
src/util/report_manager.cpp

index 7d37ef81009e969392370677da8c0a9e7ccd98b1..32dc8f2482b609833df2f07c9af2f2130a4c454e 100644 (file)
@@ -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<ReportID> &reports) {
+bool requiresDedupe(const CastleProto &proto,
+                    const ue2::flat_set<ReportID> &reports) {
     ue2::unordered_set<ReportID> seen;
     for (const PureRepeat &pr : proto.repeats | map_values) {
         for (const ReportID &report : pr.reports) {
index a35f229dd31d4acec3f55ae31001a0491c92175e..bb5eff5905bdfc34fa6a34583053d6dd97271678 100644 (file)
@@ -38,6 +38,7 @@
 #include "nfagraph/ng_repeat.h"
 #include "util/alloc.h"
 #include "util/depth.h"
+#include "util/ue2_containers.h"
 
 #include <map>
 #include <memory>
@@ -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<ReportID> &reports);
+bool requiresDedupe(const CastleProto &proto,
+                    const ue2::flat_set<ReportID> &reports);
 
 /**
  * \brief Build an NGHolder from a CastleProto.
index 1a1fc223f0e4b16efd3c2f36f2331e0c5efd252e..bef2114f2c9ddd2149c0e97aab8cd9b4c8347f61 100644 (file)
@@ -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 <memory>
@@ -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<ReportID> &reports) const
-        = 0;
+    virtual bool requiresDedupeSupport(const ue2::flat_set<ReportID> &reports)
+        const = 0;
 };
 
 /** \brief Abstract interface intended for callers from elsewhere in the tree,
index b8775912bbb54f2786584988d525b6d935e01380..e54c03708c948e7eed2f2f994eee7a91d82517ff 100644 (file)
@@ -538,7 +538,7 @@ u32 RoseBuildImpl::getNewLiteralId() {
 }
 
 static
-bool requiresDedupe(const NGHolder &h, const set<ReportID> &reports,
+bool requiresDedupe(const NGHolder &h, const ue2::flat_set<ReportID> &reports,
                     const Grey &grey) {
     /* TODO: tighten */
     NFAVertex seen_vert = NFAGraph::null_vertex();
@@ -581,13 +581,14 @@ bool requiresDedupe(const NGHolder &h, const set<ReportID> &reports,
 class RoseDedupeAuxImpl : public RoseDedupeAux {
 public:
     explicit RoseDedupeAuxImpl(const RoseBuildImpl &tbi_in);
-    bool requiresDedupeSupport(const set<ReportID> &reports) const override;
+    bool requiresDedupeSupport(
+        const ue2::flat_set<ReportID> &reports) const override;
 
     const RoseBuildImpl &tbi;
-    map<ReportID, set<RoseVertex> > vert_map;
-    map<ReportID, set<suffix_id> > suffix_map;
-    map<ReportID, set<const OutfixInfo *> > outfix_map;
-    map<ReportID, set<const raw_puff *> > puff_map;
+    map<ReportID, set<RoseVertex>> vert_map;
+    map<ReportID, set<suffix_id>> suffix_map;
+    map<ReportID, set<const OutfixInfo *>> outfix_map;
+    map<ReportID, set<const raw_puff *>> puff_map;
 };
 
 unique_ptr<RoseDedupeAux> RoseBuildImpl::generateDedupeAux() const {
@@ -644,8 +645,8 @@ RoseDedupeAuxImpl::RoseDedupeAuxImpl(const RoseBuildImpl &tbi_in)
     }
 }
 
-bool RoseDedupeAuxImpl::requiresDedupeSupport(const set<ReportID> &reports)
-    const {
+bool RoseDedupeAuxImpl::requiresDedupeSupport(
+    const ue2::flat_set<ReportID> &reports) const {
     /* TODO: this could be expanded to check for offset or character
        constraints */
 
index eacef005c2713a62a6485df21a2dda910050baaa..425f166d1bdaf7637cd06662ed57daedcfe8d0c3 100644 (file)
@@ -128,11 +128,9 @@ vector<ReportID> ReportManager::getDkeyToReportTable() const {
 }
 
 void ReportManager::assignDkeys(const RoseBuild *rose) {
-    unique_ptr<RoseDedupeAux> dedupe = rose->generateDedupeAux();
-
     DEBUG_PRINTF("assigning...\n");
 
-    map<u32, set<ReportID>> ext_to_int;
+    map<u32, ue2::flat_set<ReportID>> 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;