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) {
#include "nfagraph/ng_repeat.h"
#include "util/alloc.h"
#include "util/depth.h"
+#include "util/ue2_containers.h"
#include <map>
#include <memory>
* \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.
#include "rose_in_graph.h"
#include "util/alloc.h"
#include "util/charreach.h"
+#include "util/ue2_containers.h"
#include "util/ue2string.h"
#include <memory>
/** \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,
}
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();
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 {
}
}
-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 */
}
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];
}
}
+ auto dedupe = rose->generateDedupeAux();
+
for (const auto &m : ext_to_int) {
u32 ext = m.first;