mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
refactor bool to void setDistinctTops setDistinctRoseTops
setDistinctSuffixTops
This commit is contained in:
parent
ea420114a7
commit
389b55c647
@ -1687,7 +1687,7 @@ void replaceTops(NGHolder &h, const map<u32, u32> &top_mapping) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
bool setDistinctTops(NGHolder &h1, const NGHolder &h2,
|
void setDistinctTops(NGHolder &h1, const NGHolder &h2,
|
||||||
map<u32, u32> &top_mapping) {
|
map<u32, u32> &top_mapping) {
|
||||||
flat_set<u32> tops1 = getTops(h1), tops2 = getTops(h2);
|
flat_set<u32> tops1 = getTops(h1), tops2 = getTops(h2);
|
||||||
|
|
||||||
@ -1697,7 +1697,7 @@ bool setDistinctTops(NGHolder &h1, const NGHolder &h2,
|
|||||||
// If our tops don't intersect, we're OK to merge with no changes.
|
// If our tops don't intersect, we're OK to merge with no changes.
|
||||||
if (!has_intersection(tops1, tops2)) {
|
if (!has_intersection(tops1, tops2)) {
|
||||||
DEBUG_PRINTF("tops don't intersect\n");
|
DEBUG_PRINTF("tops don't intersect\n");
|
||||||
return true;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Otherwise, we have to renumber the tops in h1 so that they don't overlap
|
// Otherwise, we have to renumber the tops in h1 so that they don't overlap
|
||||||
@ -1712,17 +1712,17 @@ bool setDistinctTops(NGHolder &h1, const NGHolder &h2,
|
|||||||
}
|
}
|
||||||
|
|
||||||
replaceTops(h1, top_mapping);
|
replaceTops(h1, top_mapping);
|
||||||
return true;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool setDistinctRoseTops(RoseGraph &g, NGHolder &h1, const NGHolder &h2,
|
void setDistinctRoseTops(RoseGraph &g, NGHolder &h1, const NGHolder &h2,
|
||||||
const deque<RoseVertex> &verts1) {
|
const deque<RoseVertex> &verts1) {
|
||||||
map<u32, u32> top_mapping;
|
map<u32, u32> top_mapping;
|
||||||
|
|
||||||
setDistinctTops(h1, h2, top_mapping);
|
setDistinctTops(h1, h2, top_mapping);
|
||||||
|
|
||||||
if (top_mapping.empty()) {
|
if (top_mapping.empty()) {
|
||||||
return true; // No remapping necessary.
|
return ; // No remapping necessary.
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto v : verts1) {
|
for (auto v : verts1) {
|
||||||
@ -1740,17 +1740,17 @@ bool setDistinctRoseTops(RoseGraph &g, NGHolder &h1, const NGHolder &h2,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
bool setDistinctSuffixTops(RoseGraph &g, NGHolder &h1, const NGHolder &h2,
|
void setDistinctSuffixTops(RoseGraph &g, NGHolder &h1, const NGHolder &h2,
|
||||||
const deque<RoseVertex> &verts1) {
|
const deque<RoseVertex> &verts1) {
|
||||||
map<u32, u32> top_mapping;
|
map<u32, u32> top_mapping;
|
||||||
setDistinctTops(h1, h2, top_mapping);
|
setDistinctTops(h1, h2, top_mapping);
|
||||||
|
|
||||||
if (top_mapping.empty()) {
|
if (top_mapping.empty()) {
|
||||||
return true; // No remapping necessary.
|
return ; // No remapping necessary.
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto v : verts1) {
|
for (auto v : verts1) {
|
||||||
@ -1760,7 +1760,7 @@ bool setDistinctSuffixTops(RoseGraph &g, NGHolder &h1, const NGHolder &h2,
|
|||||||
g[v].suffix.top = top_mapping[t];
|
g[v].suffix.top = top_mapping[t];
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return ;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** \brief Estimate the number of accel states in the given graph when built as
|
/** \brief Estimate the number of accel states in the given graph when built as
|
||||||
|
@ -62,7 +62,7 @@ bool mergeableRoseVertices(const RoseBuildImpl &tbi, RoseVertex u,
|
|||||||
bool mergeableRoseVertices(const RoseBuildImpl &tbi,
|
bool mergeableRoseVertices(const RoseBuildImpl &tbi,
|
||||||
const std::set<RoseVertex> &v1,
|
const std::set<RoseVertex> &v1,
|
||||||
const std::set<RoseVertex> &v2);
|
const std::set<RoseVertex> &v2);
|
||||||
bool setDistinctRoseTops(RoseGraph &g, NGHolder &h1, const NGHolder &h2,
|
void setDistinctRoseTops(RoseGraph &g, NGHolder &h1, const NGHolder &h2,
|
||||||
const std::deque<RoseVertex> &verts1);
|
const std::deque<RoseVertex> &verts1);
|
||||||
|
|
||||||
} // namespace ue2
|
} // namespace ue2
|
||||||
|
@ -1294,12 +1294,7 @@ bool attemptRoseGraphMerge(RoseBuildImpl &build, bool preds_same, RoseVertex a,
|
|||||||
|
|
||||||
DEBUG_PRINTF("victim %zu states\n", num_vertices(*a_h));
|
DEBUG_PRINTF("victim %zu states\n", num_vertices(*a_h));
|
||||||
DEBUG_PRINTF("winner %zu states\n", num_vertices(*b_h));
|
DEBUG_PRINTF("winner %zu states\n", num_vertices(*b_h));
|
||||||
|
setDistinctRoseTops(g, victim, *b_h, deque<RoseVertex>(1, a));
|
||||||
if (!setDistinctRoseTops(g, victim, *b_h, deque<RoseVertex>(1, a))) {
|
|
||||||
assert(roseHasTops(build, a));
|
|
||||||
assert(roseHasTops(build, b));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(victim.kind == b_h->kind);
|
assert(victim.kind == b_h->kind);
|
||||||
assert(!generates_callbacks(*b_h));
|
assert(!generates_callbacks(*b_h));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user