| 1 | <HTML> |
|---|
| 2 | <!-- |
|---|
| 3 | Copyright (C) 2001, Andreas Scherer, Jeremy Siek, Lie-Quan Lee, |
|---|
| 4 | and Andrew Lumsdaine |
|---|
| 5 | |
|---|
| 6 | -- Distributed under the Boost Software License, Version 1.0. |
|---|
| 7 | -- (See accompanying file LICENSE_1_0.txt or copy at |
|---|
| 8 | -- http://www.boost.org/LICENSE_1_0.txt) |
|---|
| 9 | --> |
|---|
| 10 | <Head> |
|---|
| 11 | <Title>Boost Graph Library: Stanford Graph Interface</Title> |
|---|
| 12 | <BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b" |
|---|
| 13 | ALINK="#ff0000"> |
|---|
| 14 | <IMG SRC="../../../boost.png" |
|---|
| 15 | ALT="C++ Boost" width="277" height="86"> |
|---|
| 16 | |
|---|
| 17 | <BR Clear> |
|---|
| 18 | |
|---|
| 19 | <H1> |
|---|
| 20 | Using SGB Graphs in BGL |
|---|
| 21 | </H1> |
|---|
| 22 | |
|---|
| 23 | The Boost Graph Library (BGL) header, <a |
|---|
| 24 | href="../../../boost/graph/stanford_graph.hpp" |
|---|
| 25 | ><tt><boost/graph/stanford_graph.hpp></tt></a>, adapts a |
|---|
| 26 | Stanford GraphBase (SGB) <tt>Graph</tt> pointer into a BGL-compatible |
|---|
| 27 | <a href="./VertexListGraph.html">VertexListGraph</a>. Note that |
|---|
| 28 | a graph adaptor <b>class</b> is <i>not</i> used; SGB's <tt>Graph*</tt> |
|---|
| 29 | itself becomes a model of VertexListGraph. The VertexListGraph |
|---|
| 30 | concept is fulfilled by defining the appropriate non-member functions |
|---|
| 31 | for <tt>Graph*</tt>. |
|---|
| 32 | |
|---|
| 33 | <H2><a name="sec:SGB"></a> |
|---|
| 34 | The Stanford GraphBase |
|---|
| 35 | </H2> |
|---|
| 36 | |
|---|
| 37 | <P> |
|---|
| 38 | "The <a href="http://www-cs-staff.stanford.edu/~knuth/sgb.html">Stanford |
|---|
| 39 | GraphBase</a> (SGB) is a collection of datasets and computer programs that |
|---|
| 40 | generate and examine a wide variety of graphs and networks." The SGB was |
|---|
| 41 | developed and published by |
|---|
| 42 | <a href="http://www-cs-staff.stanford.edu/~knuth">Donald E. Knuth</a> |
|---|
| 43 | in 1993. The fully documented source code is available for anonymous ftp |
|---|
| 44 | from <a href="ftp://labrea.stanford.edu/pub/sgb/sgb.tar.gz">Stanford |
|---|
| 45 | University</a> and in the book "The Stanford GraphBase, A Platform for |
|---|
| 46 | Combinatorial Computing," published jointly by ACM Press and Addison-Wesley |
|---|
| 47 | Publishing Company in 1993. (This book contains several chapters with |
|---|
| 48 | additional information not available in the electronic distribution.) |
|---|
| 49 | |
|---|
| 50 | <H3><a name="sec:CWEB"></a> |
|---|
| 51 | Prerequisites |
|---|
| 52 | </H3> |
|---|
| 53 | |
|---|
| 54 | The source code of SGB is written in accordance with the rules of the |
|---|
| 55 | <a href="http://www-cs-staff.stanford.edu/~knuth/lp.html">Literate |
|---|
| 56 | Programming</a> paradigm, so you need to make sure that your computer supports |
|---|
| 57 | the <a href="http://www-cs-staff.stanford.edu/~knuth/cweb.html">CWEB</a> |
|---|
| 58 | system. The CWEB sources are available for anonymous ftp from |
|---|
| 59 | <a href="ftp://labrea.stanford.edu/pub/cweb/cweb.tar.gz">Stanford |
|---|
| 60 | University</a>. Bootstrapping CWEB on Unix systems is elementary and |
|---|
| 61 | documented in the CWEB distribution; pre-compiled binary executables of the |
|---|
| 62 | CWEB tools for Win32 systems are available from |
|---|
| 63 | <a href="http://www.literateprogramming.com">www.literateprogramming.com</a>. |
|---|
| 64 | |
|---|
| 65 | <H3><a name="sec:SGB:Installation"></a> |
|---|
| 66 | Installing the SGB |
|---|
| 67 | </H3> |
|---|
| 68 | |
|---|
| 69 | After you have acquired the <a href="#sec:SGB">SGB sources</a> and have |
|---|
| 70 | installed a working <a href="#sec:CWEB">CWEB system</a> (at least the |
|---|
| 71 | "ctangle" processor is required), you're almost set for compiling the SGB |
|---|
| 72 | sources. SGB is written in "old-style C," but the Boost Graph Library |
|---|
| 73 | expects to handle "modern C" and C++. Fortunately, the SGB distribution |
|---|
| 74 | comes with an appropriate set of patches that convert all the sources from |
|---|
| 75 | "KR-C" to "ANSI-C," thus allowing for smooth integration of the Stanford |
|---|
| 76 | GraphBase in the Boost Graph Library. |
|---|
| 77 | |
|---|
| 78 | <ul> |
|---|
| 79 | <li> |
|---|
| 80 | <b>Unix</b>: After extracting the SGB archive, but prior to invoking |
|---|
| 81 | "<tt>make tests</tt>" and "<tt>make install</tt>," you should say |
|---|
| 82 | "<tt>ln -s PROTOTYPES/*.ch .</tt>" in the root directory where you extracted |
|---|
| 83 | the SGB files (or you can simply copy the change files next to the proper |
|---|
| 84 | source files). The Unix <tt>Makefile</tt> coming with SGB conveniently |
|---|
| 85 | looks for "change files" matching the SGB source files and automatically |
|---|
| 86 | applies them with the "ctangle" processor. The resulting C files will |
|---|
| 87 | smoothly run through the compiler. |
|---|
| 88 | </li> |
|---|
| 89 | <li> |
|---|
| 90 | <b>Win32</b>: The "MSVC" subdirectory of the SGB distribution contains a |
|---|
| 91 | complete set of "Developer Studio Projects" (and a single "Workspace"), |
|---|
| 92 | applicable with Microsoft Developer Studio 6. The installation process |
|---|
| 93 | is documented in the accompanying file <tt>README.MSVC</tt>. The "MSVC" |
|---|
| 94 | contribution has been updated to make use of the "PROTOTYPES" as well, so you |
|---|
| 95 | don't need to worry about that. |
|---|
| 96 | </li> |
|---|
| 97 | </ul> |
|---|
| 98 | |
|---|
| 99 | <H3><a name="sec:UsingSGB"></a> |
|---|
| 100 | Using the SGB |
|---|
| 101 | </H3> |
|---|
| 102 | |
|---|
| 103 | After you have run <a href="#sec:SGB:Installation">the installation |
|---|
| 104 | process</a> of the SGB, you can use the BGL graph interface with the |
|---|
| 105 | SGB <tt>Graph*</tt>, <a href="../../../boost/graph/stanford_graph.hpp" |
|---|
| 106 | ><tt><boost/graph/stanford_graph.hpp></tt></a>, which will be |
|---|
| 107 | described <a href="#sec:BGL:Interface">next</a>. All you have to |
|---|
| 108 | do is tell the C++ compiler where to look for the SGB headerfiles (by |
|---|
| 109 | default, <tt>/usr/local/sgb/include</tt> on Unix and the "MSVC" |
|---|
| 110 | subdirectory of the SGB installation on Win32) and the linker where to |
|---|
| 111 | find the SGB static library file (<tt>libgb.a</tt> on Unix and |
|---|
| 112 | <tt>libgb.lib</tt> on Win32); consult the documentation of your |
|---|
| 113 | particular compiler about how to do that. |
|---|
| 114 | |
|---|
| 115 | <H3><a name="sec:SGB:Problems"></a> |
|---|
| 116 | Technicalities |
|---|
| 117 | </H3> |
|---|
| 118 | |
|---|
| 119 | <ul> |
|---|
| 120 | <li> |
|---|
| 121 | <b>Headerfile selection</b>: The two SGB modules <tt>gb_graph</tt> and |
|---|
| 122 | <tt>gb_io</tt> use the preprocessor switch <tt>SYSV</tt> to select either the |
|---|
| 123 | headerfile <tt><string.h></tt> (if <tt>SYSV</tt> is <tt>#define</tt>d) |
|---|
| 124 | or the headerfile <tt><strings.h></tt> (if <tt>SYSV</tt> is <i>not</i> |
|---|
| 125 | <tt>#define</tt>d). Some compilers, like <tt>gcc</tt>/<tt>g++</tt>, |
|---|
| 126 | don't care much (<tt>gcc</tt> "knows" about the "string" functions without |
|---|
| 127 | refering to <tt><string.h></tt>), but others, like MSVC on Win32, do (so |
|---|
| 128 | all "Developer Studio Projects" in the "MSVC" subdirectory of the |
|---|
| 129 | <a href="#sec:SGB">SGB distribution</a> appropriately define <tt>SYSV</tt>). |
|---|
| 130 | You should be careful to set (or not) <tt>SYSV</tt> according to the needs of |
|---|
| 131 | your compiler. |
|---|
| 132 | </li> |
|---|
| 133 | <li> |
|---|
| 134 | <b>Missing include guards</b>: None of the SGB headerfiles uses "internal |
|---|
| 135 | include guards" to protect itself from multiple inclusion. To avoid |
|---|
| 136 | trouble, you must <i>not</i> <tt>#include</tt> any of the SGB headerfiles |
|---|
| 137 | before or after <a href="#sec:Wrapper">the BGL wrapper</a> in a compilation |
|---|
| 138 | unit; it will fully suffice to use the BGL interface. |
|---|
| 139 | </li> |
|---|
| 140 | <li> |
|---|
| 141 | <b>Preprocessor macros</b>: The SGB headerfiles make liberal use of the |
|---|
| 142 | preprocessor <i>without</i> sticking to a particular convention (like |
|---|
| 143 | all-uppercase names or a particular prefix). At the time of writing, |
|---|
| 144 | already three of these preprocessor macros collide with the conventions of |
|---|
| 145 | either C++, g++, or BGL, and are fixed in <a href="#sec:Wrapper">the BGL |
|---|
| 146 | wrapper</a>. We can not guarantee that no other preprocessor-induced |
|---|
| 147 | problems may arise (but we are willing to learn about any such collisions). |
|---|
| 148 | </li> |
|---|
| 149 | </ul> |
|---|
| 150 | |
|---|
| 151 | <H2><a name="sec:BGL:Interface"></a> |
|---|
| 152 | The BGL Interface for the SGB |
|---|
| 153 | </H2> |
|---|
| 154 | |
|---|
| 155 | <H3><a name="sec:Wrapper"></a> |
|---|
| 156 | Where Defined |
|---|
| 157 | </H3> |
|---|
| 158 | |
|---|
| 159 | <a href="../../../boost/graph/stanford_graph.hpp" |
|---|
| 160 | ><tt><boost/graph/stanford_graph.hpp></tt></a> |
|---|
| 161 | |
|---|
| 162 | <p> The main purpose of this Boost Graph Library (BGL) headerfile is to |
|---|
| 163 | <tt>#include</tt> all global definitions for the general stuff of the |
|---|
| 164 | <a href="#sec:SGB">Stanford GraphBase</a> (SGB) and its various graph generator |
|---|
| 165 | functions by reading all <a href="#sec:SGB:Problems">SGB headerfiles</a> as in |
|---|
| 166 | section 2 of the "<tt>test_sample</tt>" program. |
|---|
| 167 | |
|---|
| 168 | <p> On top of the SGB stuff, the BGL <tt>stanford_graph.hpp</tt> |
|---|
| 169 | header adds and defines appropriate types and functions for using the |
|---|
| 170 | SGB graphs in the BGL framework. Apart from the improved |
|---|
| 171 | interface, the <a href="#sec:UsingSGB">SGB (static) library</a> is |
|---|
| 172 | used "as is" in the context of BGL. |
|---|
| 173 | |
|---|
| 174 | <H3> |
|---|
| 175 | Model Of |
|---|
| 176 | </H3> |
|---|
| 177 | |
|---|
| 178 | <a href="./VertexListGraph.html">Vertex List Graph</a> and <a |
|---|
| 179 | href="./PropertyGraph.html">Property Graph</a>. The set of property |
|---|
| 180 | tags that can be used with the SGB graph is described in the <a |
|---|
| 181 | href="#properties">Vertex and Edge Properties</a> section below. |
|---|
| 182 | |
|---|
| 183 | |
|---|
| 184 | <H3><a name="sec:Example"></a> |
|---|
| 185 | Example |
|---|
| 186 | </H3> |
|---|
| 187 | |
|---|
| 188 | The example program <a href="../example/miles_span.cpp"> |
|---|
| 189 | <tt><example/miles_span.cpp></tt></a> represents the first |
|---|
| 190 | application of the generic framework of BGL to an SGB graph. It |
|---|
| 191 | uses Prim's algorithm to solve the "minimum spanning tree" |
|---|
| 192 | problem. In addition, the programs <a |
|---|
| 193 | href="../../../libs/graph/example/girth.cpp"> |
|---|
| 194 | <tt><example/girth.cpp></tt></a> and <a |
|---|
| 195 | href="../example/roget_components.cpp"> |
|---|
| 196 | <tt><example/roget_components.cpp></tt></a> have been ported |
|---|
| 197 | from the SGB. We intend to implement more algorithms from SGB in |
|---|
| 198 | a generic fashion and to provide the remaining example programs of SGB |
|---|
| 199 | for the BGL framework. If you would like to help, feel free to |
|---|
| 200 | submit your contributions! |
|---|
| 201 | |
|---|
| 202 | <H3> |
|---|
| 203 | Associated Types |
|---|
| 204 | </H3> |
|---|
| 205 | |
|---|
| 206 | <hr> |
|---|
| 207 | |
|---|
| 208 | <tt>graph_traits<Graph*>::vertex_descriptor</tt><br><br> |
|---|
| 209 | The type for the vertex descriptors associated with the <tt>Graph*</tt>. |
|---|
| 210 | We use the type <tt>Vertex*</tt> as the vertex descriptor. |
|---|
| 211 | |
|---|
| 212 | <hr> |
|---|
| 213 | |
|---|
| 214 | <tt>graph_traits<Graph*>::edge_descriptor</tt><br><br> The type |
|---|
| 215 | for the edge descriptors associated with the <tt>Graph*</tt>. This is |
|---|
| 216 | the type <tt>boost::sgb_edge</tt>. In addition to supporting all the |
|---|
| 217 | required operations of a BGL edge descriptor, the |
|---|
| 218 | <tt>boost::sgb_edge</tt> class has the following constructor. |
|---|
| 219 | <pre> |
|---|
| 220 | sgb_edge::sgb_edge(Arc* arc, Vertex* source) |
|---|
| 221 | </pre> |
|---|
| 222 | |
|---|
| 223 | <hr> |
|---|
| 224 | |
|---|
| 225 | <tt>graph_traits<Graph*>::vertex_iterator</tt><br><br> |
|---|
| 226 | The type for the iterators returned by <tt>vertices()</tt>. |
|---|
| 227 | |
|---|
| 228 | <hr> |
|---|
| 229 | |
|---|
| 230 | <tt>graph_traits<Graph*>::out_edge_iterator</tt><br><br> |
|---|
| 231 | The type for the iterators returned by <tt>out_edges()</tt>. |
|---|
| 232 | |
|---|
| 233 | <hr> |
|---|
| 234 | |
|---|
| 235 | <tt>graph_traits<Graph*>::adjacency_iterator</tt><br><br> |
|---|
| 236 | The type for the iterators returned by <tt>adjacent_vertices()</tt>. |
|---|
| 237 | |
|---|
| 238 | <hr> |
|---|
| 239 | |
|---|
| 240 | <tt>graph_traits<Graph*>::vertices_size_type</tt><br><br> |
|---|
| 241 | The type used for dealing with the number of vertices in the graph. |
|---|
| 242 | |
|---|
| 243 | <hr> |
|---|
| 244 | |
|---|
| 245 | <tt>graph_traits<Graph*>::edge_size_type</tt><br><br> |
|---|
| 246 | The type used for dealing with the number of edges in the graph. |
|---|
| 247 | |
|---|
| 248 | <hr> |
|---|
| 249 | |
|---|
| 250 | <tt>graph_traits<Graph*>::degree_size_type</tt><br><br> |
|---|
| 251 | The type used for dealing with the number of edges incident to a vertex |
|---|
| 252 | in the graph. |
|---|
| 253 | |
|---|
| 254 | <hr> |
|---|
| 255 | |
|---|
| 256 | <tt>graph_traits<Graph*>::directed_category</tt><br><br> |
|---|
| 257 | Provides information about whether the graph is directed or |
|---|
| 258 | undirected. An SGB <tt>Graph*</tt> is directed so this type is |
|---|
| 259 | <tt>directed_tag</tt>. |
|---|
| 260 | |
|---|
| 261 | <hr> |
|---|
| 262 | |
|---|
| 263 | <tt>graph_traits<Graph*>::traversal_category</tt><br><br> |
|---|
| 264 | An SGB <tt>Graph*</tt> provides traversal of the vertex set, |
|---|
| 265 | out edges, and adjacent vertices. Therefore the traversal category |
|---|
| 266 | tag is defined as follows: |
|---|
| 267 | <pre> |
|---|
| 268 | struct sgb_traversal_tag : |
|---|
| 269 | public virtual vertex_list_graph_tag, |
|---|
| 270 | public virtual incidence_graph_tag, |
|---|
| 271 | public virtual adjacency_graph_tag { }; |
|---|
| 272 | </pre> |
|---|
| 273 | |
|---|
| 274 | <hr> |
|---|
| 275 | |
|---|
| 276 | <tt>graph_traits<Graph*>::edge_parallel_category</tt><br><br> |
|---|
| 277 | This describes whether the graph class allows the insertion of parallel edges |
|---|
| 278 | (edges with the same source and target). The SGB <tt>Graph*</tt> |
|---|
| 279 | does not prevent addition of parallel edges, so this type |
|---|
| 280 | is <tt>allow_parallel_edge_tag</tt>. |
|---|
| 281 | |
|---|
| 282 | <hr> |
|---|
| 283 | |
|---|
| 284 | <H3> |
|---|
| 285 | Non-Member Functions |
|---|
| 286 | </H3> |
|---|
| 287 | |
|---|
| 288 | <hr> |
|---|
| 289 | |
|---|
| 290 | <pre> |
|---|
| 291 | std::pair<vertex_iterator, vertex_iterator> |
|---|
| 292 | vertices(Graph* g) |
|---|
| 293 | </pre> |
|---|
| 294 | Returns an iterator-range providing access to the vertex set of graph |
|---|
| 295 | <tt>g</tt>. |
|---|
| 296 | |
|---|
| 297 | <hr> |
|---|
| 298 | |
|---|
| 299 | <pre> |
|---|
| 300 | std::pair<out_edge_iterator, out_edge_iterator> |
|---|
| 301 | out_edges(vertex_descriptor v, Graph* g) |
|---|
| 302 | </pre> |
|---|
| 303 | Returns an iterator-range providing access to the out-edges of vertex |
|---|
| 304 | <tt>v</tt> in graph <tt>g</tt>.<br> |
|---|
| 305 | There is no corresponding <tt>in_edges</tt> function. |
|---|
| 306 | |
|---|
| 307 | <hr> |
|---|
| 308 | |
|---|
| 309 | <pre> |
|---|
| 310 | std::pair<adjacency_iterator, adjacency_iterator> |
|---|
| 311 | adjacent_vertices(vertex_descriptor v, Graph* g) |
|---|
| 312 | </pre> |
|---|
| 313 | Returns an iterator-range providing access to the adjacent vertices of vertex |
|---|
| 314 | <tt>v</tt> in graph <tt>g</tt>. |
|---|
| 315 | |
|---|
| 316 | <hr> |
|---|
| 317 | |
|---|
| 318 | <pre> |
|---|
| 319 | vertex_descriptor |
|---|
| 320 | source(edge_descriptor e, Graph* g) |
|---|
| 321 | </pre> |
|---|
| 322 | Returns the source vertex of edge <tt>e</tt>. |
|---|
| 323 | |
|---|
| 324 | <hr> |
|---|
| 325 | |
|---|
| 326 | <pre> |
|---|
| 327 | vertex_descriptor |
|---|
| 328 | target(edge_descriptor e, Graph* g) |
|---|
| 329 | </pre> |
|---|
| 330 | Returns the target vertex of edge <tt>e</tt>. |
|---|
| 331 | |
|---|
| 332 | <hr> |
|---|
| 333 | |
|---|
| 334 | <pre> |
|---|
| 335 | degree_size_type |
|---|
| 336 | out_degree(vertex_descriptor v, Graph* g) |
|---|
| 337 | </pre> |
|---|
| 338 | Returns the number of edges leaving vertex <tt>v</tt>.<br> |
|---|
| 339 | There is no corresponding <tt>in_degree</tt> function. |
|---|
| 340 | |
|---|
| 341 | <hr> |
|---|
| 342 | |
|---|
| 343 | <pre> |
|---|
| 344 | vertices_size_type |
|---|
| 345 | num_vertices(Graph* g) |
|---|
| 346 | </pre> |
|---|
| 347 | Returns the number of vertices in the graph <tt>g</tt>. |
|---|
| 348 | |
|---|
| 349 | <hr> |
|---|
| 350 | |
|---|
| 351 | <pre> |
|---|
| 352 | edge_size_type |
|---|
| 353 | num_edges(Graph* g) |
|---|
| 354 | </pre> |
|---|
| 355 | Returns the number of edges in the graph <tt>g</tt>. |
|---|
| 356 | |
|---|
| 357 | <hr> |
|---|
| 358 | |
|---|
| 359 | <pre> |
|---|
| 360 | vertex_descriptor |
|---|
| 361 | vertex(vertices_size_type n, Graph* g) |
|---|
| 362 | </pre> |
|---|
| 363 | Returns the (0-based) nth vertex in the graph's vertex list. |
|---|
| 364 | |
|---|
| 365 | <hr> |
|---|
| 366 | |
|---|
| 367 | <pre> |
|---|
| 368 | template <class <a href="./PropertyTag.html">PropertyTag</a>> |
|---|
| 369 | property_map<Graph*, PropertyTag>::type |
|---|
| 370 | get(PropertyTag, Graph*& g) |
|---|
| 371 | |
|---|
| 372 | template <class <a href="./PropertyTag.html">PropertyTag</a>> |
|---|
| 373 | property_map<Graph*, Tag>::const_type |
|---|
| 374 | get(PropertyTag, const Graph*& g) |
|---|
| 375 | </pre> |
|---|
| 376 | Returns the property map object for the vertex property specified by |
|---|
| 377 | <TT>PropertyTag</TT>. The <TT>PropertyTag</TT> must be one of |
|---|
| 378 | the described below. |
|---|
| 379 | |
|---|
| 380 | <hr> |
|---|
| 381 | |
|---|
| 382 | <h3><a name="properties">Vertex and Edge Properties</a></h3> |
|---|
| 383 | |
|---|
| 384 | The SGB <tt>Vertex</tt> and <tt>Arc</tt> structures provide |
|---|
| 385 | "utility" fields for storing extra information. We provide |
|---|
| 386 | BGL wrappers that provide access to these fields through <a |
|---|
| 387 | href="../../property_map/property_map.html">property maps</a>. In |
|---|
| 388 | addition, vertex index and edge length maps are provided. A property |
|---|
| 389 | map object can be obtained from a SGB <tt>Graph*</tt> using the |
|---|
| 390 | <tt>get()</tt> function described in the <a |
|---|
| 391 | href="./PropertyGraph.html">Property Graph</a> concept. |
|---|
| 392 | |
|---|
| 393 | <p> |
|---|
| 394 | The following list of property tags can be used to specify which |
|---|
| 395 | utility field you would like a property map for. |
|---|
| 396 | </p> |
|---|
| 397 | |
|---|
| 398 | <pre> |
|---|
| 399 | <i>// vertex properties</i> |
|---|
| 400 | template <class T> u_property; |
|---|
| 401 | template <class T> v_property; |
|---|
| 402 | template <class T> w_property; |
|---|
| 403 | template <class T> x_property; |
|---|
| 404 | template <class T> y_property; |
|---|
| 405 | template <class T> z_property; |
|---|
| 406 | |
|---|
| 407 | <i>// edge properties</i> |
|---|
| 408 | template <class T> a_property; |
|---|
| 409 | template <class T> b_property; |
|---|
| 410 | </pre> |
|---|
| 411 | |
|---|
| 412 | <p> |
|---|
| 413 | The template parameter <tt>T</tt> for these tags is limited to the |
|---|
| 414 | types in the <tt>util</tt> union declared in the SGB header |
|---|
| 415 | <tt>gb_graph.h</tt>, which are <tt>Vertex*</tt>, <tt>Arc*</tt>, |
|---|
| 416 | <tt>Graph*</tt>, <tt>char*</tt>, and <tt>long</tt>. The property maps |
|---|
| 417 | for the utility fields are models of <a |
|---|
| 418 | href="../../property_map/LvaluePropertyMap.html">Lvalue Property |
|---|
| 419 | Map</a>. |
|---|
| 420 | </p> |
|---|
| 421 | |
|---|
| 422 | <p> |
|---|
| 423 | The property map for vertex indices can be obtained using the |
|---|
| 424 | <tt>vertex_index_t</tt> tag, and this property map is a <a |
|---|
| 425 | href="../../property_map/ReadablePropertyMap.html">Readable Property |
|---|
| 426 | Map</a>. A property map for edge length's can be obtained using the |
|---|
| 427 | <tt>edge_length_t</tt> tag, and this property map is a <a |
|---|
| 428 | href="../../property_map/LvaluePropertyMap.html">Lvalue Property |
|---|
| 429 | Map</a> whose value type is <tt>long</tt>. |
|---|
| 430 | </p> |
|---|
| 431 | |
|---|
| 432 | <p> |
|---|
| 433 | Property map objects can be obtained via the <tt>get()</tt> function |
|---|
| 434 | of the Property Graph concept. The type of the property map is given |
|---|
| 435 | by the <a href="./property_map.html"><tt>property_map</tt></a> traits |
|---|
| 436 | class.</p> |
|---|
| 437 | |
|---|
| 438 | |
|---|
| 439 | <HR> |
|---|
| 440 | <TABLE> |
|---|
| 441 | <TR valign=top> |
|---|
| 442 | <TD nowrap>Copyright © 2001</TD><TD> |
|---|
| 443 | <A HREF="http://people.freenet.de/andreas.scherer">Andreas Scherer</A>, |
|---|
| 444 | Aachen (<A |
|---|
| 445 | HREF="mailto:andreas_freenet@freenet.de">andreas_freenet@freenet.de</A>)<br> |
|---|
| 446 | <A HREF="../../../people/jeremy_siek.htm">Jeremy Siek</A>, |
|---|
| 447 | Indiana University (<A |
|---|
| 448 | HREF="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</A>)<br> |
|---|
| 449 | <A HREF="../../../people/liequan_lee.htm">Lie-Quan Lee</A>, |
|---|
| 450 | Indiana University (<A |
|---|
| 451 | HREF="mailto:llee@cs.indiana.edu">llee@cs.indiana.edu</A>)<br> |
|---|
| 452 | <A HREF=http://www.osl.iu.edu/~lums>Andrew Lumsdaine</A>, |
|---|
| 453 | Indiana University (<A |
|---|
| 454 | HREF="mailto:lums@osl.iu.edu">lums@osl.iu.edu</A>) |
|---|
| 455 | </TD></TR></TABLE> |
|---|
| 456 | |
|---|
| 457 | </BODY> |
|---|
| 458 | </HTML> |
|---|