annotate DEPENDENCIES/generic/include/boost/graph/matrix_as_graph.hpp @ 118:770eb830ec19 emscripten

Typo fix
author Chris Cannam
date Wed, 18 May 2016 16:14:08 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 //
Chris@16 2 //=======================================================================
Chris@16 3 // Copyright 1997, 1998, 1999, 2000 University of Notre Dame.
Chris@16 4 // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
Chris@16 5 //
Chris@16 6 // Distributed under the Boost Software License, Version 1.0. (See
Chris@16 7 // accompanying file LICENSE_1_0.txt or copy at
Chris@16 8 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 9 //=======================================================================
Chris@16 10 //
Chris@16 11 #ifndef BOOST_GRAPH_MATRIX2GRAPH_HPP
Chris@16 12 #define BOOST_GRAPH_MATRIX2GRAPH_HPP
Chris@16 13
Chris@16 14 #include <utility>
Chris@16 15 #include <boost/config.hpp>
Chris@16 16 #include <boost/operators.hpp>
Chris@16 17 #include <boost/pending/detail/int_iterator.hpp>
Chris@16 18 #include <boost/graph/graph_traits.hpp>
Chris@16 19
Chris@16 20 namespace boost {
Chris@16 21
Chris@16 22 template <class Iter, class Vertex>
Chris@16 23 class matrix_adj_iterator;
Chris@16 24
Chris@16 25 template <class Iter, class Vertex>
Chris@16 26 class matrix_incidence_iterator;
Chris@16 27
Chris@16 28 }
Chris@16 29
Chris@16 30 #define BOOST_GRAPH_ADAPT_MATRIX_TO_GRAPH(Matrix) \
Chris@16 31 namespace boost { \
Chris@16 32 template <> \
Chris@16 33 struct graph_traits< Matrix > { \
Chris@16 34 typedef Matrix::OneD::const_iterator Iter; \
Chris@16 35 typedef Matrix::size_type V; \
Chris@16 36 typedef V vertex_descriptor; \
Chris@16 37 typedef Iter E; \
Chris@16 38 typedef E edge_descriptor; \
Chris@16 39 typedef boost::matrix_incidence_iterator<Iter, V> out_edge_iterator; \
Chris@16 40 typedef boost::matrix_adj_iterator<Iter, V> adjacency_iterator; \
Chris@16 41 typedef Matrix::size_type size_type; \
Chris@16 42 typedef boost::int_iterator<size_type> vertex_iterator; \
Chris@16 43 \
Chris@16 44 friend std::pair<vertex_iterator, vertex_iterator> \
Chris@16 45 vertices(const Matrix& g) { \
Chris@16 46 typedef vertex_iterator VIter; \
Chris@16 47 return std::make_pair(VIter(0), VIter(g.nrows())); \
Chris@16 48 } \
Chris@16 49 \
Chris@16 50 friend std::pair<out_edge_iterator, out_edge_iterator> \
Chris@16 51 out_edges(V v, const Matrix& g) { \
Chris@16 52 typedef out_edge_iterator IncIter; \
Chris@16 53 return std::make_pair(IncIter(g[v].begin()), \
Chris@16 54 IncIter(g[v].end())); \
Chris@16 55 } \
Chris@16 56 friend std::pair<adjacency_iterator, adjacency_iterator> \
Chris@16 57 adjacent_vertices(V v, const Matrix& g) { \
Chris@16 58 typedef adjacency_iterator AdjIter; \
Chris@16 59 return std::make_pair(AdjIter(g[v].begin()), \
Chris@16 60 AdjIter(g[v].end())); \
Chris@16 61 } \
Chris@16 62 friend vertex_descriptor \
Chris@16 63 source(E e, const Matrix& g) { \
Chris@16 64 return e.row(); \
Chris@16 65 } \
Chris@16 66 friend vertex_descriptor \
Chris@16 67 target(E e, const Matrix& g) { \
Chris@16 68 return e.column(); \
Chris@16 69 } \
Chris@16 70 friend size_type \
Chris@16 71 num_vertices(const Matrix& g) { \
Chris@16 72 return g.nrows(); \
Chris@16 73 } \
Chris@16 74 friend size_type \
Chris@16 75 num_edges(const Matrix& g) { \
Chris@16 76 return g.nnz(); \
Chris@16 77 } \
Chris@16 78 friend size_type \
Chris@16 79 out_degree(V i, const Matrix& g) { \
Chris@16 80 return g[i].nnz(); \
Chris@16 81 } \
Chris@16 82 }; \
Chris@16 83 }
Chris@16 84
Chris@16 85 namespace boost {
Chris@16 86
Chris@16 87 template <class Iter, class Vertex>
Chris@16 88 class matrix_adj_iterator
Chris@16 89 : public std::iterator<std::input_iterator_tag, Vertex >
Chris@16 90 {
Chris@16 91 typedef matrix_adj_iterator self;
Chris@16 92 public:
Chris@16 93 matrix_adj_iterator() { }
Chris@16 94 matrix_adj_iterator(Iter i) : _iter(i) { }
Chris@16 95 matrix_adj_iterator(const self& x) : _iter(x._iter) { }
Chris@16 96 self& operator=(const self& x) { _iter = x._iter; return *this; }
Chris@16 97 Vertex operator*() { return _iter.column(); }
Chris@16 98 self& operator++() { ++_iter; return *this; }
Chris@16 99 self operator++(int) { self t = *this; ++_iter; return t; }
Chris@16 100 bool operator==(const self& x) const { return _iter == x._iter; }
Chris@16 101 bool operator!=(const self& x) const { return _iter != x._iter; }
Chris@16 102 protected:
Chris@16 103 Iter _iter;
Chris@16 104 };
Chris@16 105
Chris@16 106 template <class Iter, class Vertex>
Chris@16 107 class matrix_incidence_iterator
Chris@16 108 : public std::iterator<std::input_iterator_tag, Iter >
Chris@16 109 {
Chris@16 110 typedef matrix_incidence_iterator self;
Chris@16 111 public:
Chris@16 112 matrix_incidence_iterator() { }
Chris@16 113 matrix_incidence_iterator(Iter i) : _iter(i) { }
Chris@16 114 matrix_incidence_iterator(const self& x) : _iter(x._iter) { }
Chris@16 115 self& operator=(const self& x) { _iter = x._iter; return *this; }
Chris@16 116 Iter operator*() { return _iter; }
Chris@16 117 self& operator++() { ++_iter; return *this; }
Chris@16 118 self operator++(int) { self t = *this; ++_iter; return t; }
Chris@16 119 bool operator==(const self& x) const { return _iter == x._iter; }
Chris@16 120 bool operator!=(const self& x) const { return _iter != x._iter; }
Chris@16 121 protected:
Chris@16 122 Iter _iter;
Chris@16 123 };
Chris@16 124
Chris@16 125 } /* namespace boost */
Chris@16 126
Chris@16 127 #endif /* BOOST_GRAPH_MATRIX2GRAPH_HPP*/