return true;
}
-/** Merge the group of graphs in \p cluster where possible. The (from, to)
- * mapping of merged graphs is returned in \p merged. */
-void mergeNfaCluster(const vector<NGHolder *> &cluster,
- const ReportManager *rm,
- map<NGHolder *, NGHolder *> &merged,
- const CompileContext &cc) {
+map<NGHolder *, NGHolder *> mergeNfaCluster(const vector<NGHolder *> &cluster,
+ const ReportManager *rm,
+ const CompileContext &cc) {
+ map<NGHolder *, NGHolder *> merged;
+
if (cluster.size() < 2) {
- return;
+ return merged;
}
DEBUG_PRINTF("new cluster, size %zu\n", cluster.size());
- merged.clear();
priority_queue<NfaMergeCandidateH> pq;
buildNfaMergeQueue(cluster, &pq);
}
}
}
+
+ return merged;
}
} // namespace ue2
#include <map>
#include <vector>
-#include "nfagraph/ng_holder.h"
-#include "util/ue2_containers.h"
-
namespace ue2 {
struct CompileContext;
struct Grey;
+class NGHolder;
class ReportManager;
/**
/**
* \brief Merge the group of graphs in \p cluster where possible.
*
- * The (from, to) mapping of merged graphs is returned in \p merged.
+ * The (from, to) mapping of merged graphs is returned.
*/
-void mergeNfaCluster(const std::vector<NGHolder *> &cluster,
- const ReportManager *rm,
- std::map<NGHolder *, NGHolder *> &merged,
- const CompileContext &cc);
+std::map<NGHolder *, NGHolder *>
+mergeNfaCluster(const std::vector<NGHolder *> &cluster, const ReportManager *rm,
+ const CompileContext &cc);
/**
* \brief Merge graph \p ga into graph \p gb.
it = it2;
DEBUG_PRINTF("merging cluster %zu\n", cluster.size());
- map<NGHolder *, NGHolder *> merged;
- mergeNfaCluster(cluster, &rm, merged, cc);
+ auto merged = mergeNfaCluster(cluster, &rm, cc);
DEBUG_PRINTF("done\n");
for (const auto &m : merged) {
batch.push_back(*it);
assert((*it)->kind == NFA_OUTFIX);
if (batch.size() == MERGE_GROUP_SIZE_MAX || next(it) == ite) {
- mergeNfaCluster(batch, &build.rm, merged, build.cc);
+ auto batch_merged = mergeNfaCluster(batch, &build.rm, build.cc);
+ insert(&merged, batch_merged);
batch.clear();
}
}