5 #ifndef ctrlplane_db_graph_h
6 #define ctrlplane_db_graph_h
10 #include <boost/function.hpp>
11 #include <boost/iterator/iterator_facade.hpp>
12 #include <boost/tuple/tuple.hpp>
41 return std::make_pair(
false, std::set<std::string>());
45 typedef boost::tuple<DBGraphVertex *, DBGraphVertex *, DBGraphEdge *>
DBEdgeInfo;
47 edge_iterator, DBEdgeInfo, boost::forward_traversal_tag, DBEdgeInfo
64 vertex_iterator, DBGraphVertex, boost::forward_traversal_tag> {
80 graph_t::vertex_iterator
end_;
94 return graph_[vertex].entry;
108 EdgeVisitor edge_visit_fn,
const VisitorFilter &filter);
124 typedef std::queue<DBGraphVertex *>
VisitQ;
132 uint64_t curr_walk,
VisitQ &visit_queue,
133 bool match_name=
false,
const std::string &allowed_edge =
"");
bool equal(const edge_iterator &rhs) const
edge_iterator edge_list_begin()
boost::adjacency_list< ordered_set_by_nameS, boost::listS, boost::undirectedS, VertexProperties, EdgeProperties > graph_t
boost::graph_traits< graph_t >::edge_iterator edge_iterator
virtual bool VertexFilter(const DBGraphVertex *vertex) const
const graph_t * graph() const
void IterateEdges(DBGraphVertex *start, OutEdgeIterator &iter_begin, OutEdgeIterator &iter_end, VertexVisitor vertex_visit_fn, EdgeVisitor edge_visit_fn, EdgePredicate &edge_test, VertexPredicate &vertex_test, uint64_t curr_walk, VisitQ &visit_queue, bool match_name=false, const std::string &allowed_edge="")
edge_iterator(DBGraph *graph)
virtual bool EdgeFilter(const DBGraphVertex *source, const DBGraphVertex *target, const DBGraphEdge *edge) const
void Unlink(DBGraphEdge *link)
std::queue< DBGraphVertex * > VisitQ
virtual AllowedEdgeRetVal AllowedEdges(const DBGraphVertex *vertex) const
DBGraphVertex * vertex_data(DBGraphBase::vertex_descriptor vertex) const
boost::function< void(DBGraphEdge *)> EdgeVisitor
DBGraphBase::edge_iterator iter_
boost::graph_traits< graph_t >::vertex_descriptor vertex_descriptor
size_t vertex_count() const
std::set< std::string > AllowedEdgeSet
vertex_iterator vertex_list_begin()
DBGraphBase::vertex_descriptor Vertex
vertex_iterator vertex_list_end()
edge_iterator edge_list_end()
DBEdgeInfo dereference() const
void AddNode(DBGraphVertex *entry)
friend class boost::iterator_core_access
void Visit(DBGraphVertex *start, VertexVisitor vertex_visit_fn, EdgeVisitor edge_visit_fn)
graph_t::vertex_iterator iter_
friend class boost::iterator_core_access
void RemoveNode(DBGraphVertex *entry)
DBGraphEdge * edge_data(DBGraph::Edge edge) const
graph_t::vertex_iterator end_
std::pair< bool, AllowedEdgeSet > AllowedEdgeRetVal
DBGraphVertex & dereference() const
boost::function< void(DBGraphVertex *)> VertexFinish
boost::graph_traits< graph_t >::edge_descriptor edge_descriptor
DBGraphBase::edge_descriptor Edge
Edge Link(DBGraphVertex *lhs, DBGraphVertex *rhs, DBGraphEdge *link)
vertex_iterator(DBGraph *graph)
DBGraphVertex * vertex_target(DBGraphVertex *current_vertex, DBGraphEdge *edge)
bool equal(const vertex_iterator &rhs) const
size_t edge_count() const
DBGraphBase::edge_iterator end_
OutEdgeListType::iterator OutEdgeIterator
boost::function< void(DBGraphVertex *)> VertexVisitor
boost::tuple< DBGraphVertex *, DBGraphVertex *, DBGraphEdge * > DBEdgeInfo
const std::string edge_name(DBGraph::Edge edge) const