Blame view

3rdparty/boost_1_81_0/boost/graph/detail/index.hpp 2.56 KB
63e88f80   Hu Chunming   提交三方库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
  // (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