mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
ng_equivalence: use flat_set for VertexInfoSet
This commit is contained in:
parent
4a417c42e5
commit
923e602601
@ -63,10 +63,10 @@ class VertexInfo;
|
|||||||
struct VertexInfoPtrCmp {
|
struct VertexInfoPtrCmp {
|
||||||
// for flat_set
|
// for flat_set
|
||||||
bool operator()(const VertexInfo *a, const VertexInfo *b) const;
|
bool operator()(const VertexInfo *a, const VertexInfo *b) const;
|
||||||
// for unordered_set
|
|
||||||
size_t operator()(const VertexInfo *a) const;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
using VertexInfoSet = flat_set<VertexInfo *, VertexInfoPtrCmp>;
|
||||||
|
|
||||||
/** Precalculated (and maintained) information about a vertex. */
|
/** Precalculated (and maintained) information about a vertex. */
|
||||||
class VertexInfo {
|
class VertexInfo {
|
||||||
public:
|
public:
|
||||||
@ -74,8 +74,8 @@ public:
|
|||||||
: v(v_in), vert_index(g[v].index), cr(g[v].char_reach),
|
: v(v_in), vert_index(g[v].index), cr(g[v].char_reach),
|
||||||
equivalence_class(~0), vertex_flags(g[v].assert_flags) {}
|
equivalence_class(~0), vertex_flags(g[v].assert_flags) {}
|
||||||
|
|
||||||
flat_set<VertexInfo *, VertexInfoPtrCmp> pred; //!< predecessors of this vertex
|
VertexInfoSet pred; //!< predecessors of this vertex
|
||||||
flat_set<VertexInfo *, VertexInfoPtrCmp> succ; //!< successors of this vertex
|
VertexInfoSet succ; //!< successors of this vertex
|
||||||
NFAVertex v;
|
NFAVertex v;
|
||||||
size_t vert_index;
|
size_t vert_index;
|
||||||
CharReach cr;
|
CharReach cr;
|
||||||
@ -86,21 +86,11 @@ public:
|
|||||||
unsigned vertex_flags;
|
unsigned vertex_flags;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef ue2::unordered_set<VertexInfo *, VertexInfoPtrCmp> VertexInfoSet;
|
|
||||||
|
|
||||||
// compare two vertex info pointers on their vertex index
|
// compare two vertex info pointers on their vertex index
|
||||||
bool VertexInfoPtrCmp::operator()(const VertexInfo *a,
|
bool VertexInfoPtrCmp::operator()(const VertexInfo *a,
|
||||||
const VertexInfo *b) const {
|
const VertexInfo *b) const {
|
||||||
return a->vert_index < b->vert_index;
|
return a->vert_index < b->vert_index;
|
||||||
}
|
}
|
||||||
// provide a "hash" for vertex info pointer by returning its vertex index
|
|
||||||
size_t VertexInfoPtrCmp::operator()(const VertexInfo *a) const {
|
|
||||||
return a->vert_index;
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace {
|
|
||||||
|
|
||||||
// to avoid traversing infomap each time we need to check the class during
|
// to avoid traversing infomap each time we need to check the class during
|
||||||
// partitioning, we will cache the information pertaining to a particular class
|
// partitioning, we will cache the information pertaining to a particular class
|
||||||
|
Loading…
x
Reference in New Issue
Block a user