From: Ian Jackson Date: Sat, 29 Dec 2007 01:03:56 +0000 (+0000) Subject: wip; EdgeListGraph will be annoying X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=moebius2.git;a=commitdiff_plain;h=eabc23e9e378362412c163e89611016ad8845a0c wip; EdgeListGraph will be annoying --- diff --git a/bgl.cpp b/bgl.cpp index 3e2912e..4ed2537 100644 --- a/bgl.cpp +++ b/bgl.cpp @@ -18,7 +18,7 @@ extern "C" { #define VMASK (YMASK|XMASK) #define ESHIFT (YBITS|XBITS) -#define FMAX ((5 << ESHIFT) | VMASK) + namespace boost { // We make Layout a model of various BGL Graph concepts. @@ -28,15 +28,27 @@ namespace boost { struct layout_graph_traversal_category : public virtual incidence_graph_tag, - public virtual edge_list_graph_tag - public virtual vertex_list_graph_tag { }; + public virtual vertex_list_graph_tag, + public virtual edge_list_graph_tag { }; struct OutEdgeIncrable { int f; - OutEdgeIncrable operator++(OutEdgeIncrable f) { return f + 1< { // Concept Graph: @@ -56,8 +68,7 @@ namespace boost { inline int source(int f, const Layout& g) { return f&VMASK; } inline int target(int f, const Layout& g) { return EDGE_END2(f&VMASK, f>>ESHIFT); } - inline std::pair::out_edge_iterator, - typename graph_traits::out_edge_iterator> + inline std::pair out_edges(int v, const Layout& g) { return std::make_pair(out_edge_iterator(OutEdgeIncrable(v, VE_MIN(v))), out_edge_iterator(OutEdgeIncrable(v, VE_MAX(v)))); @@ -66,6 +77,16 @@ namespace boost { // Concept VertexListGraph: typedef counting_iterator vertex_iterator; + typedef unsigned vertices_size_type; + inline std::pair + vertices(const Layout& g) { + return std::make_pair(vertex_iterator(0), vertex_iterator(N)); + } + inline unsigned num_vertices(const Layout& g) { return N; } + + // Concept EdgeListGraph: + typedef counting_iterator edge_iterator; + inline std::pair }