$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r54296 - in sandbox/SOC/2009/function_graph: boost/function_graph libs/test
From: mlopez7_at_[hidden]
Date: 2009-06-23 21:28:25
Author: lopezeant
Date: 2009-06-23 21:28:24 EDT (Tue, 23 Jun 2009)
New Revision: 54296
URL: http://svn.boost.org/trac/boost/changeset/54296
Log:
In edge iterator includes edge now and test1 works again.
Text files modified: 
   sandbox/SOC/2009/function_graph/boost/function_graph/function_graph.hpp |    73 +++++++++++++++++++++++++-------------- 
   sandbox/SOC/2009/function_graph/libs/test/test1.cpp                     |     6 +-                                      
   2 files changed, 49 insertions(+), 30 deletions(-)
Modified: sandbox/SOC/2009/function_graph/boost/function_graph/function_graph.hpp
==============================================================================
--- sandbox/SOC/2009/function_graph/boost/function_graph/function_graph.hpp	(original)
+++ sandbox/SOC/2009/function_graph/boost/function_graph/function_graph.hpp	2009-06-23 21:28:24 EDT (Tue, 23 Jun 2009)
@@ -28,15 +28,15 @@
     typedef Result result_type;
     typedef Vertex vertex_descriptor;
 
-    func_graph_edge(result_type rslt,
-                    vertex_descriptor src,
-                    vertex_descriptor trg)
-        : result(rslt), source(src), target(trg)
+    func_graph_edge(result_type result,
+                    vertex_descriptor source,
+                    vertex_descriptor target)
+        : result_(result), source_(source), target_(target)
     { }
 
-    result_type result;
-    vertex_descriptor source;
-    vertex_descriptor target;
+    result_type result_;
+    vertex_descriptor source_;
+    vertex_descriptor target_;
 };
 
 }   // detail namespace
@@ -77,16 +77,21 @@
 
 
 /** @name function_graph_in_edge_iterator
- * Iterates through the in edges of a vertex
+ * Iterates through the in edges of a vertex.
  * @note The name of this data type is 31 characters long. I need some brevity.
  */
 
-template<typename Edge, typename Range>
+template<typename Function, typename Edge, typename Range>
 struct function_graph_in_edge_iterator {
+private:
+    typedef function_graph_in_edge_iterator<Function, Edge, Range> This;
+
+public:
     typedef Range vertex_iterator_range;
     typedef typename iterator_range<vertex_iterator_range>::type
             vertex_iterator;
     typedef Edge edge_descriptor;
+    typedef Function function_type;
 
     /** Iterator traits */
     typedef std::bidirectional_iterator_tag iterator_category;
@@ -95,26 +100,40 @@
     typedef value_type* pointer;
     typedef value_type& reference;
 
-    /** Default constructor which looks for the first edge. */
-    function_graph_in_edge_iterator()
-        : range_()
+    /** Constructors */
+    //@{
+    function_graph_in_edge_iterator(function_type const& f)
+        : edge_(f), range_()
+    { };
+
+    function_graph_in_edge_iterator(function_type const& f,
+                                    vertex_iterator_range const& r)
+        : edge_(f), range_(r)
     { };
 
-    /** Constructor taking a vertex range */
-    function_graph_in_edge_iterator(vertex_iterator_range const& cp)
-        : range_(cp)
+    function_graph_in_edge_iterator(This const& cp)
+        : edge_(cp.edge_), range_(cp.range_)
     { };
+    //@}
 
     /** Bidirectional Iterator operator overloads */
     function_graph_in_edge_iterator& operator++()
-    { };
+    {
+        ++begin(range_);
+        return begin(range_); 
+    };
 
     function_graph_in_edge_iterator& operator--()
     { };
 
-    vertex_iterator& operator*()
-    { };
+    edge_descriptor& operator*()
+    {
+        return edge_descriptor(edge_(*begin(range_), *end(range_)),
+                               begin(range_),
+                               end(range_));
+    };
 
+    function_type edge_;
     vertex_iterator_range range_;
 };
 
@@ -157,7 +176,7 @@
     typedef Range vertex_iterator_range;
     typedef typename range_iterator<vertex_iterator_range>::type
                          vertex_iterator;
-    typedef function_graph_in_edge_iterator<edge_descriptor,
+    typedef function_graph_in_edge_iterator<function_type, edge_descriptor,
             vertex_iterator_range> in_edge_iterator;
 
     /** Constructor: takes a functor and range */
@@ -213,14 +232,14 @@
 Vertex source(detail::func_graph_edge<Result, Vertex> const& e,
               function_graph<function<Result(Vertex, Vertex)>, Range > const& g)
 {
-    return e.source;
+    return e.source_;
 }
 
 template <typename Result, typename Vertex, typename Range>
 Vertex target(detail::func_graph_edge<Result, Vertex> const& e,
               function_graph<function<Result(Vertex, Vertex)>, Range > const& g)
 {
-    return e.target;
+    return e.target_;
 }
 
 
@@ -241,14 +260,14 @@
     typedef typename Graph::vertex_iterator vertex_iterator;
     typedef std::pair<in_edge_iterator, in_edge_iterator> iter_range;
 
-    vertex_iterator first_vertex_pair = boost::begin(g.range_);
-    vertex_iterator vertex_end = boost::end(g.range_);
+    vertex_iterator first_vertex_pair = begin(g.range_);
+    vertex_iterator vertex_end = end(g.range_);
     while((first_vertex_pair != vertex_end) || !g.edge_(first_vertex_pair, v))
     { ++first_vertex_pair; }
-    in_edge_iterator begin(first_vertex_pair, v);
-    in_edge_iterator end(vertex_end, v);
+    in_edge_iterator in_edge_begin(first_vertex_pair, v);
+    in_edge_iterator in_edge_end(vertex_end, v);
 
-    return std::make_pair(begin, end);
+    return std::make_pair(in_edge_begin, in_edge_end);
 }
 
 
@@ -315,7 +334,7 @@
     typedef FUNC_GRAPH graph_type;
     typedef typename FUNC_GRAPH::result_type result_type;
     result_type result = g.edge(u, v);
-    return bind_edge(result, u, v);
+    return detail::bind_edge(result, u, v);
 }
 
 #undef FUNC_GRAPH
Modified: sandbox/SOC/2009/function_graph/libs/test/test1.cpp
==============================================================================
--- sandbox/SOC/2009/function_graph/libs/test/test1.cpp	(original)
+++ sandbox/SOC/2009/function_graph/libs/test/test1.cpp	2009-06-23 21:28:24 EDT (Tue, 23 Jun 2009)
@@ -79,17 +79,17 @@
     graph_boolean::edge_descriptor e1 = edge(x, y, funcGraph_boolean).first;
     assert(source(e1, funcGraph_boolean) == x);
     assert(target(e1, funcGraph_boolean) == y);
-    assert(e1.result == (1 < 2));
+    assert(e1.result_ == (1 < 2));
 
     graph_normal::edge_descriptor e2 = edge(u, v, funcGraph_normal).first;
     assert(source(e2, funcGraph_normal) == u);
     assert(target(e2, funcGraph_normal) == v);
-    assert(e2.result == (u + v));
+    assert(e2.result_ == (u + v));
 
     graph_optional::edge_descriptor e3 = edge(r, s, funcGraph_optional).first;
     assert(source(e3, funcGraph_optional) == r);
     assert(target(e3, funcGraph_optional) == s);
-    assert(e2.result == -1);
+    assert(e2.result_ == -1);
     
     return 0;
 }