//=======================================================================
// Copyright 2009 Trustees of Indiana University
// Author: Jeremiah Willcock
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//=======================================================================

#ifndef BOOST_GRAPH_LOOKUP_EDGE_HPP
#define BOOST_GRAPH_LOOKUP_EDGE_HPP

#include <utility>
#include <boost/config.hpp>
#include <boost/utility/enable_if.hpp>
#include <boost/graph/graph_traits.hpp>

// lookup_edge: a function that acts like edge() but falls back to out_edges()
// and a search when edge() is not provided.

namespace boost {

  template <typename Graph>
  std::pair<typename boost::graph_traits<Graph>::edge_descriptor, bool>
  lookup_edge(typename boost::graph_traits<Graph>::vertex_descriptor src,
              typename boost::graph_traits<Graph>::vertex_descriptor tgt,
              const Graph& g,
              typename boost::enable_if<is_adjacency_matrix<Graph>, int>::type = 0) {
    return edge(src, tgt, g);
  }

  template <typename Graph>
  std::pair<typename boost::graph_traits<Graph>::edge_descriptor, bool>
  lookup_edge(typename boost::graph_traits<Graph>::vertex_descriptor src,
              typename boost::graph_traits<Graph>::vertex_descriptor tgt,
              const Graph& g,
              typename boost::disable_if<is_adjacency_matrix<Graph>, int>::type = 0) {
    typedef typename boost::graph_traits<Graph>::out_edge_iterator it;
    typedef typename boost::graph_traits<Graph>::edge_descriptor edesc;
    std::pair<it, it> oe = out_edges(src, g);
    for (; oe.first != oe.second; ++oe.first) {
      edesc e = *oe.first;
      if (target(e, g) == tgt) return std::make_pair(e, true);
    }
    return std::make_pair(edesc(), false);
  }

}

#endif // BOOST_GRAPH_LOOKUP_EDGE_HPP
