Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/graph/detail/index.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/graph/detail/index.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,74 @@ +// (C) Copyright 2007-2009 Andrew Sutton +// +// Use, modification and distribution are subject to the +// Boost Software License, Version 1.0 (See accompanying file +// LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt) + +#ifndef BOOST_GRAPH_DETAIL_INDEX_HPP +#define BOOST_GRAPH_DETAIL_INDEX_HPP + +#include <boost/graph/graph_traits.hpp> + +// The structures in this module are responsible for selecting and defining +// types for accessing a builting index map. Note that the selection of these +// types requires the Graph parameter to model either VertexIndexGraph or +// EdgeIndexGraph. + +namespace boost +{ + namespace detail + { + template <typename Graph> + struct vertex_indexer + { + typedef vertex_index_t index_type; + typedef typename property_map<Graph, vertex_index_t>::type map_type; + typedef typename property_map<Graph, vertex_index_t>::const_type const_map_type; + typedef typename property_traits<map_type>::value_type value_type; + typedef typename graph_traits<Graph>::vertex_descriptor key_type; + + static const_map_type index_map(const Graph& g) + { return get(vertex_index, g); } + + static map_type index_map(Graph& g) + { return get(vertex_index, g); } + + static value_type index(key_type k, const Graph& g) + { return get(vertex_index, g, k); } + }; + + template <typename Graph> + struct edge_indexer + { + typedef edge_index_t index_type; + typedef typename property_map<Graph, edge_index_t>::type map_type; + typedef typename property_map<Graph, edge_index_t>::const_type const_map_type; + typedef typename property_traits<map_type>::value_type value_type; + typedef typename graph_traits<Graph>::edge_descriptor key_type; + + static const_map_type index_map(const Graph& g) + { return get(edge_index, g); } + + static map_type index_map(Graph& g) + { return get(edge_index, g); } + + static value_type index(key_type k, const Graph& g) + { return get(edge_index, g, k); } + }; + + // NOTE: The Graph parameter MUST be a model of VertexIndexGraph or + // VertexEdgeGraph - whichever type Key is selecting. + template <typename Graph, typename Key> + struct choose_indexer + { + typedef typename mpl::if_< + is_same<Key, typename graph_traits<Graph>::vertex_descriptor>, + vertex_indexer<Graph>, + edge_indexer<Graph> + >::type indexer_type; + typedef typename indexer_type::index_type index_type; + }; + } +} + +#endif