Boost logo

Boost Users :

From: Michael Kettner (kettner_at_[hidden])
Date: 2002-08-05 11:17:04


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hi Jeremy,

I think I discovered a problem concerning filtered_graphs and parallel edges:

Assume I have a graph containing two edges E1 and E2 connecting node A and
node B. Now I crate a boost::filtered_graph (myFilteredGraph) with a filter
that returns true for only E1. When I now try to get E1 by calling
        edge = boost::edge( A, B, myFilteredGraph ).first;
the result is undefined. Looking at the code (filtered_graph.hpp) I found out
that the edge is return by:

  edge(typename filtered_graph<G, EP, VP>::vertex_descriptor u,
       typename filtered_graph<G, EP, VP>::vertex_descriptor v,
       const filtered_graph<G, EP, VP>& g)
  {
    typename G::edge_descriptor e;
    bool exists;
    tie(e, exists) = edge(u, v, g.m_g);
    return std::make_pair(e, exists && g.m_edge_pred(e));
  }

Here, the line
    tie(e, exists) = edge(u, v, g.m_g);
returns _some_ edge, but not necessarily the _right_ one. The call edge(...)
is not called for the filtered graph and
    g.m_edge_pred(e)
is called _after_ getting the wrong edge (resulting in a return value FALSE).

One solution would be to call
  boost::edge_range(A, B, myFilteredGraph)
on my filtered_graph to get all visible edges, but this function is not
provided. Any ideas how to solve my problem?

Michael

- --
http://www.ive.uni-hannover.de # kettner_at_[hidden]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE9TqUAkCdGnb0kVFMRAlsLAJwKJJ2NSLRu2HUv/H4sAhr4W5WdkACdHXZ6
3kz8fBDvysWKc1vxd5rf/CE=
=l+NV
-----END PGP SIGNATURE-----


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net