williamr@2: // williamr@2: //======================================================================= williamr@2: // Copyright 1997, 1998, 1999, 2000 University of Notre Dame. williamr@2: // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek williamr@2: // williamr@2: // Distributed under the Boost Software License, Version 1.0. (See williamr@2: // accompanying file LICENSE_1_0.txt or copy at williamr@2: // http://www.boost.org/LICENSE_1_0.txt) williamr@2: //======================================================================= williamr@2: williamr@2: #ifndef BOOST_GRAPH_DETAIL_EDGE_HPP williamr@2: #define BOOST_GRAPH_DETAIL_EDGE_HPP williamr@2: williamr@2: #if __GNUC__ < 3 williamr@2: #include williamr@2: #else williamr@2: #include williamr@2: #endif williamr@2: williamr@2: namespace boost { williamr@2: williamr@2: namespace detail { williamr@2: williamr@2: template williamr@2: struct edge_base williamr@2: { williamr@2: inline edge_base() {} williamr@2: inline edge_base(Vertex s, Vertex d) williamr@2: : m_source(s), m_target(d) { } williamr@2: Vertex m_source; williamr@2: Vertex m_target; williamr@2: }; williamr@2: williamr@2: template williamr@2: class edge_desc_impl : public edge_base { williamr@2: typedef edge_desc_impl self; williamr@2: typedef edge_base Base; williamr@2: public: williamr@2: typedef void property_type; williamr@2: williamr@2: inline edge_desc_impl() : m_eproperty(0) {} williamr@2: williamr@2: inline edge_desc_impl(Vertex s, Vertex d, const property_type* eplug) williamr@2: : Base(s,d), m_eproperty(const_cast(eplug)) { } williamr@2: williamr@2: property_type* get_property() { return m_eproperty; } williamr@2: const property_type* get_property() const { return m_eproperty; } williamr@2: williamr@2: // protected: williamr@2: property_type* m_eproperty; williamr@2: }; williamr@2: williamr@2: template williamr@2: inline bool williamr@2: operator==(const detail::edge_desc_impl& a, williamr@2: const detail::edge_desc_impl& b) williamr@2: { williamr@2: return a.get_property() == b.get_property(); williamr@2: } williamr@2: template williamr@2: inline bool williamr@2: operator!=(const detail::edge_desc_impl& a, williamr@2: const detail::edge_desc_impl& b) williamr@2: { williamr@2: return ! (a.get_property() == b.get_property()); williamr@2: } williamr@2: williamr@2: } //namespace detail williamr@2: williamr@2: } // namespace boost williamr@2: williamr@2: namespace std { williamr@2: williamr@2: #if __GNUC__ < 3 williamr@2: template williamr@2: std::ostream& williamr@2: operator<<(std::ostream& os, const boost::detail::edge_desc_impl& e) williamr@2: { williamr@2: return os << "(" << e.m_source << "," << e.m_target << ")"; williamr@2: } williamr@2: #else williamr@2: template williamr@2: std::basic_ostream& williamr@2: operator<<(std::basic_ostream& os, williamr@2: const boost::detail::edge_desc_impl& e) williamr@2: { williamr@2: return os << "(" << e.m_source << "," << e.m_target << ")"; williamr@2: } williamr@2: #endif williamr@2: williamr@2: } williamr@2: williamr@2: williamr@2: #endif // BOOST_GRAPH_DETAIL_DETAIL_EDGE_HPP