Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r48754 - in sandbox/SOC/2008/graphs/trunk/libs/graphs/doc: . adj_list algo html
From: asutton_at_[hidden]
Date: 2008-09-12 14:36:31


Author: asutton
Date: 2008-09-12 14:36:30 EDT (Fri, 12 Sep 2008)
New Revision: 48754
URL: http://svn.boost.org/trac/boost/changeset/48754

Log:
docs
Added:
   sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/adj_list/
   sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/adj_list.qbk (contents, props changed)
   sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/adj_list/directed.qbk (contents, props changed)
   sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/adj_list/undirected.qbk (contents, props changed)
   sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/adj_matrix.qbk (contents, props changed)
   sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/algo/
   sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/algo/search.qbk (contents, props changed)
   sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/descriptors.qbk (contents, props changed)
   sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/guide.qbk (contents, props changed)
   sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/html/
   sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/html/boostbook.css (contents, props changed)
   sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/macros.qbk (contents, props changed)
Text files modified:
   sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/Jamfile | 96 ++++++++++------
   sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/graphs.qbk | 235 +++++++++++++++++++++------------------
   2 files changed, 185 insertions(+), 146 deletions(-)

Modified: sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/Jamfile
==============================================================================
--- sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/Jamfile (original)
+++ sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/Jamfile 2008-09-12 14:36:30 EDT (Fri, 12 Sep 2008)
@@ -1,58 +1,80 @@
 # (C) Copyright 2008 Andrew Sutton
 # Distributed under the Boost Software License, Version 1.0.
 
-# Import a couple of modules (i.e., quickbook)
-using quickbook ;
-using boostbook ;
-
 # If not set, explicitly (at least on my system), these will cause
 # BoostBook to complain loudly. These can be passed directly to the
-# using statement above, but this keeps the Jamfile a little bit
+# using statement below, but this keeps the Jamfile a little bit
 # cleaner.
 #
 # export DOCBOOK_XSL_DIR=/usr/share/xml/docbook/stylesheet/nwalsh
 # export DOCBOOK_DTD_DIR=/usr/share/xml/docbook/schema/dtd/4.5
+#
+# This also relies on BOOST_ROOT to be defined and point to the root of the
+# Boost source distribution.
 
-path-constant images_location : html ;
+# Import a couple of modules.
+import os ;
+
+# Tools being used.
+using quickbook ;
+using boostbook ;
+using doxygen ;
+
+# Configure some of the set up.
+local boost-root = [ modules.peek : BOOST_ROOT ] ;
 
 # Build the XML document using quickbook
-xml graphs : graph.qbk ;
+xml graphs : graphs.qbk ;
 
-# Build the library documentation
-boostbook standalone : graphs
+# Build the library documentation. Referencing the output file of the xml
+# instruction is really ugly, but I can't seem to work around it. If I try
+# to reference the 'graphs' target, I get some weird duplicate target errors
+# that seem to indicate that I'm building a new target named 'graphs' and
+# adding some Python flags to them - which I'm not.
+#
+# If html/images does not exist, you will have to copy that directory into
+# from boost/doc into doc/html. The boostbook.css is added to the html directory.
+boostbook standalone : bin/gcc-4.2.3/debug/graphs.xml
     :
- # Paths
- <xsl:param>boost.root=$(boost-root)
- <xsl:param>boost.libraries=$(boost-root)/libs/libraries.htm
- <xsl:param>html.stylesheet=$(boost-root)/doc/html/boostbook.css
-
- # General style settings:
- <xsl:param>table.footnote.number.format=1
- <xsl:param>footnote.number.format=1
-
- # HTML options
- <xsl:param>navig.graphics=1
+ # Path to the project root
+ <xsl:param>project.root=..
+ # These options basically cause each sections to be generated as its
+ # own nested page.
         <xsl:param>chunk.section.depth=10
         <xsl:param>chunk.first.sections=1
         <xsl:param>toc.section.depth=10
         <xsl:param>toc.max.depth=4
         <xsl:param>generate.section.toc.level=10
- #<xsl:param>root.filename="sf_dist_and_tools"
 
- # PDF options
- <xsl:param>fop1.extensions=0
- <xsl:param>admon.graphics=1
- <format>pdf:<xsl:param>xep.extensions=1
- <format>pdf:<xsl:param>fop.extensions=0
- <format>pdf:<xsl:param>body.start.indent=0pt
- <format>pdf:<xsl:param>page.margin.inner=0.5in
- <format>pdf:<xsl:param>page.margin.inner=0.5in
- <format>pdf:<xsl:param>page.margin.outer=0.5in
- <format>pdf:<xsl:param>paper.type=A4
- <format>pdf:<xsl:param>admon.graphics.extension=".svg"
- <format>pdf:<xsl:param>use.role.for.mediaobject=1
- <format>pdf:<xsl:param>preferred.mediaobject.role=print
- <format>pdf:<xsl:param>img.src.path=$(images_location)/
- <format>pdf:<xsl:param>admon.graphics.path=$(images_location)/images/
- <format>pdf:<xsl:param>draft.mode="no"
+# <xsl:param>boost.libraries=$(boost-root)/libs/libraries.htm
+# <xsl:param>html.stylesheet=boostbook.css
+
+# # General style settings:
+# <xsl:param>table.footnote.number.format=1
+# <xsl:param>footnote.number.format=1
+#
+# # HTML options
+# <xsl:param>navig.graphics=1
+# <xsl:param>chunk.section.depth=10
+# <xsl:param>chunk.first.sections=1
+# <xsl:param>toc.section.depth=10
+# <xsl:param>toc.max.depth=4
+# <xsl:param>generate.section.toc.level=10
+
+# # PDF options
+# <xsl:param>fop1.extensions=0
+# <xsl:param>admon.graphics=1
+# <format>pdf:<xsl:param>xep.extensions=1
+# <format>pdf:<xsl:param>fop.extensions=0
+# <format>pdf:<xsl:param>body.start.indent=0pt
+# <format>pdf:<xsl:param>page.margin.inner=0.5in
+# <format>pdf:<xsl:param>page.margin.inner=0.5in
+# <format>pdf:<xsl:param>page.margin.outer=0.5in
+# <format>pdf:<xsl:param>paper.type=A4
+# <format>pdf:<xsl:param>admon.graphics.extension=".svg"
+# <format>pdf:<xsl:param>use.role.for.mediaobject=1
+# <format>pdf:<xsl:param>preferred.mediaobject.role=print
+# <format>pdf:<xsl:param>img.src.path=$(images_location)/
+# <format>pdf:<xsl:param>admon.graphics.path=$(images_location)/images/
+# <format>pdf:<xsl:param>draft.mode="no"
     ;

Added: sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/adj_list.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/adj_list.qbk 2008-09-12 14:36:30 EDT (Fri, 12 Sep 2008)
@@ -0,0 +1,38 @@
+
+[section Adjacency List]
+An adjacency list is a family of data structures that can is used to implement
+undirected, unidirectional, and bidirectional graphs. In general, an adjacency list
+is implemented as a set of vertices, each of which is associated with one or two
+lists of incident edges. The nature of the graph (undirected, directed) determines
+the structure lists.
+
+The dominating structural feature of adjacency lists are their /stores/. A store
+is a repository for storing some component of a graph such as vertices, edges, or
+properties. The term /store/ is used in place of /set/ to avoid confusion with the
+semantics of the term. A store can be implemented by nearly any container. The particular
+type of store used in a graph is selected by a /storage selector/.
+
+The adjacency lists in this library, like those in the BGL, allow a programmer to
+select the storage mechanism at compile time. The previous library used the symbolic
+types `vecS`, `listS`, etc. to determine the storage mechanism. This library extends
+that concept and defines storage selectors as metafunctions that generate the types
+required to implement an adjacency list. Storage selectors are currently specific
+to the graph type and are described along with its interface.
+
+One of the other distinguishing properties of these adjacency list implementations is
+that they do not contain edge objects. In these implementations, edges are represented
+as a tuple of containg the endpoint vertex descriptors and a descriptor to the edge's
+property (if given).
+
+[note The adjacency list implementations rely on template template parameters to
+allow the user to specify units of functionality without knowing the types on which
+those functions operate. The definition of template parameters is often not included
+in the documentation. If a template parameter is described as a /type/ then it
+is a type parameter. If the parameter is described as a /name/ then it is defined a
+template template parameter.]
+
+
+[include adj_list/undirected.qbk]
+[include adj_list/directed.qbk]
+
+[endsect]

Added: sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/adj_list/directed.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/adj_list/directed.qbk 2008-09-12 14:36:30 EDT (Fri, 12 Sep 2008)
@@ -0,0 +1,21 @@
+
+[section `directed_graph`]
+
+ #include <boost/graphs/adjacency_list/undirected_graph.hpp>
+
+ namespace boost {
+ namespace graphs {
+ namespace adjacency_list {
+
+ template <
+ typename VertexLabel = none,
+ typename EdgeLabel = none,
+ typename VertexStore = vertex_list<>,
+ typename EdgeStore = edge_list<>>
+ directed_graph;
+
+ } } }
+
+[$graph/directed.png]
+
+[endsect]

Added: sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/adj_list/undirected.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/adj_list/undirected.qbk 2008-09-12 14:36:30 EDT (Fri, 12 Sep 2008)
@@ -0,0 +1,376 @@
+
+[def undirected_graph [^undirected_graph]]
+[def VertexLabel [^VertexLabel]]
+[def EdgeLabel [^EdgeLabel]]
+[def VertexStore [^VertexStore]]
+[def EdgeStore [^EdgeStore]]
+
+[section `undirected_graph`]
+
+ #include <boost/graphs/adjacency_list/undirected_graph.hpp>
+
+ namespace boost {
+ namespace graphs {
+ namespace adjacency_list {
+
+ template <
+ typename VertexLabel = none,
+ typename EdgeLabel = none,
+ typename VertexStore = vertex_list<>,
+ typename EdgeStore = edge_list<>>
+ undirected_graph;
+
+ } } }
+
+The undirected_graph data structure is an adjacency list that implements undirected
+graph and is comprised of a number of types of objects. Its basic structure is
+shown in [link fig_1 Figure 1].
+
+[figure fig_1 images/graph/undirected.png
+ [*Figure 1. Components of an undirected graph]
+]
+
+* The VertexStore is a container that stores vertices (VertexLabel and incident edges)
+of the graph.
+* The `PropertyStore` is a container that stores the `EdgeLabel`s of edges in graph
+and descriptors to the endpoint vertices of the edge corresponding to the property.
+The type of the `PropertyStore` is determined by the type of the VertexStore.
+* The EdgeStore is a container associated with each vertex that stores descriptors
+to the corresponding endpoint and the property associated with the edge. The EdgeStore
+is referred to the `IncidenceStore` within the graph.
+
+[note *Impementation* The reason that the `PropertyStore` references the endpoints is to provide
+constant-time access to the endpoints of an edge during edge iteration. It is
+possible to create a simpler version of the undirected_graph who's property store
+does not contain back references, but neither would it provide edge iteration.]
+
+[note *Implementation* When the edge property is none, the property store should be compressed,
+eliminating the required storage space. Property descriptors can be transacted as
+integer values (or GUID's if the graph is expected to exceed 2^32 edges. This has
+specialization has not been implemented.]
+
+[heading Template Parameters]
+The following base requirements apply to the template parameters of the undirected_graph.
+
+[table Template Parameters
+[[Parameter] [Description]]
+[[VertexLabel] [Data associated with each vertex. This defaults to `none`. This must be Semiregular.]]
+[[EdgeLabel] [Data associated with each edge. This defaults to `none`. This must be Semiregular]]
+[[VertexStore] [The vertex store selector. This defaults to `vertex_list<>`.]]
+[[EdgeStore] [The edge store selector. This defaults to `edge_list<>`.]]
+]
+[heading Storage Selectors]
+The vertex storage selector is responsible for determining the type of the vertex
+descriptor, a vertex key (if used), and the the vertex store itself.
+
+ template <...>
+ struct vertex_store_selector
+ {
+ typedef ... vertex_descriptor;
+ typedef ... vertex_key;
+
+ template <typename Vertex>
+ struct vertex_store { typedef ... type; };
+ };
+
+The template parameters to a vertex store selector can be nearly anything. For example,
+in the default selectors, they are used to pass `allocator` types, and comparision
+or hash fucntions to the vertex store.
+
+[note Unless the `vertex_store<...>::type` results in a PairAssociativeContainer, the
+vertex_key is typically defined as `unused`.]
+
+The library currently defines the following vertex storage selectors for undirected
+graphs:
+
+[table Vertex Storage Selectors
+[[Selector] [Description]]
+ [
+ [`vertex_vector<Alloc>`]
+ [Vertices are stored in a `std::vector`. Vertex vectors allow vertices to
+ be added in constant time but do not allow removal. If a VertexLabel is
+ given, vertices can be searched in linear time.
+
+ [*[^Alloc]] - The name of an __Allocator__ template used to allocate vertices
+ in the vertex store. /Default/: `std::allocator`.
+ ]
+ ]
+ [
+ [`vertex_list<Alloc>`]
+ [Vertices are stored in a `std::list`. Vertex lists allow vertices to be
+ added and removed in constant time, and if a VertexLable is given, searched
+ in linear time.
+
+ [*[^Alloc]] - The name of an __Allocator__ used to allocate vertex objects.
+ /Default/: `std::allocator`.
+ ]
+ ]
+ [
+ [`vertex_set<Comp,Alloc>`]
+ [Vertices are stored in a `std::set`. Vertex sets allow vertices to be added,
+ removed and found (by their VertexLabel) in logarithmic time.
+
+ [*[^Comp]] - The name of a __StrictWeakOrder__ template used to compare the labels
+ of vertices in the vertex store. /Default/: `std::less`.
+
+ [*[^Alloc]] - The name of an __Allocator__ used to allocate vertex objects.
+ /Default/: `std::allocator`.
+ ]
+ ]
+ [
+ [`vertex_map<Key,Comp,Alloc>`]
+ [Vertices are stored in a `std::map` and mapped to a key of type `Key`. Vertex
+ maps allow vertices to be added, removed and found (by their VertexLabel)
+ in logarithmic time.
+
+ [*[^Key]] - The type of key objects that are uniquely mapped to each vertex.
+ There is not default key type, it must be provided when the graph type is defined.
+
+ [*[^Comp]] - The name of a __StrictWeakOrder__ template used to compare the keys
+ of vertices in the vertex store. /Default/: `std::less`.
+
+ [*[^Alloc]] - The name of an __Allocator__ used to allocate vertex objects.
+ /Default/: `std::allocator`.
+ ]
+ ]
+ [[`vertex_multiset<>`] [Not implemented.]]
+ [[`vertex_multimap<>`] [Not implemented.]]
+ [[`vertex_unordered_set<>`] [ Not implememnted]]
+ [[`vertex_unordered_map<>`] [ Not implememnted]]
+ [[`vertex_unordered_multiset<>`] [ Not implememnted]]
+ [[`vertex_unordered_multimap<>`] [ Not implememnted]]
+]
+The choice of vertex storage selector determines the how your program can add and/or
+remove vertices from the graph. A selector that chooses a __Sequence__ container can be
+used to implement graphs whose VertexLabel does not (necessarily) uniquely identify
+the vertex. Selectors that choose __UniqueAssociativeContainer__ containers can be used to
+associate unique labels with each vertex. In the case of __PairAssociativeContainer__
+containers, a key is mapped to each vertex in the graph. In this case, the `Key`
+parameter of the storage selector /must not be the same type/ as the VertexLabel.
+
+[note Selectors that choose __MultipleAssociativeContainer__ containers describe an
+interesting class of graphs with sets of "equivalent" vertices. I don't know of any
+obvious applications of this kind of graph, but they may be out there.]
+
+[important If the VertexStore selects an __AssociativeContainer__ then the VertexLabel
+must not be `none`.]
+
+The edge selector determines the type of property and incidence store for the
+undirected_graph class. The type of container implementing the property store
+depends on the type of incident edge store.
+
+ template <...>
+ struct undirected_edge_store_selector
+ {
+ typedef ... property_descriptor;
+ typedef ... incidence_descriptor;
+
+ template <typename VertexDesc, EdgeLabel>
+ struct property_store { typedef ... type; }
+
+ template <typename VertexDesc>
+ struct incidence_store { typedef ... type; }
+ };
+
+As with the vertex storage selector, the template parameters to the edge storage
+selector are determined by the types of container being constructed. This library
+currently provides the following types of edge storage selectors:
+
+[table Edge Storage Selectors
+[[Selector] [Description]]
+ [
+ [`edge_vector<PropAlloc,IncAlloc>`]
+ [The property and incident edge store are both implemented using `std::vector`s.
+ Edges can be added to the graph in constant time, but not removed.
+
+ [*[^PropAlloc]] - The name of an __Allocator__ used to allocate edge labels.
+ /Default/: `std::allocator`.
+
+ [*[^IncAlloc]] - The name of an __Allocator__ used to allocate incident edges.
+ /Default/: `std::allocator`.
+ ]
+ ]
+ [
+ [`edge_list<PropAlloc,IncAlloc>`]
+ [
+ The property and incident edge store are `std::list`s. Edges can be added
+ and removed in constant time.
+
+ [*[^PropAlloc]] - The name of an __Allocator__ used to allocate edge labels.
+ /Default/: `std::allocator`.
+
+ [*[^IncAlloc]] - The name of an __Allocator__ used to allocate incident edges.
+ /Default/: `std::allocator`.
+ ]
+ ]
+ [
+ [`edge_set<Comp,PropAlloc,IncAlloc>`]
+ [
+ The property store is implemented as a `std::list`, and the incident edge
+ store is implemented as a `std::map`, mapping the endpoint vertex descriptor
+ to the edge's property descriptor (effectively a set of edges). Edges can
+ be added and removed in time logarithmic to the degree of the endpoints.
+
+ [*[^Comp]] - The name of a __StrictWeakOrder__ used to compare the endpoints of
+ edges. /Default/: `std::less`.
+
+ [*[^PropAlloc]] - The name of an __Allocator__ used to allocate edge labels.
+ /Default/: `std::allocator`.
+
+ [*[^IncAlloc]] - The name of an __Allocator__ used to allocate incident edges.
+ /Default/: `std::allocator`.
+ ]
+ ]
+ [
+ [`edge_multiset<Comp,PropAlloc,IncAlloc>`]
+ [
+ The property store is implemented as a `std::list`, and the incident edge
+ store is implemented as a `std::multimap`, multimapping the endpoint vertex
+ descriptor to the edge's property descriptor (effectively a multiset of edges).
+
+ [*[^Comp]] - The name of a __StrictWeakOrder__ used to compare the endpoints of
+ edges. /Default/: `std::less`.
+
+ [*[^PropAlloc]] - The name of an __Allocator__ used to allocate edge labels.
+ /Default/: `std::allocator`.
+
+ [*[^IncAlloc]] - The name of an __Allocator__ used to allocate incident edges.
+ /Default/: `std::allocator`.
+ ]
+ ]
+ [[`edge_unordered_set<>`] [Not implemented.]]
+ [[`edge_unordered_multiset<>`] [Not implemented.]]
+]
+The choice of edge set essentially determines whether the graph will be a __SimpleGraph__
+or __Multigraph__. If the selector chooses a __Sequence__ or __MultipleAssociativeContainer__,
+then the graph is a __Multigraph__, meaning that it can contain multiple edges connecting
+two vertices (i.e., having the same endpoints). If the selector chooses a
+__UniqueAssociativeContainer__ then the graph will be a __SimpleGraph__, having unique
+vertices identified by a particular label.
+
+[heading Associated Types]
+[table Associated Types
+[[Typename] [Description]]
+[[`G::vertex_label`] [The same as VertexLabel.]]
+[[`G::edge_label`] [The same as EdgeLabel.]]
+[[`G::vertex_descriptor`] [The representative type of vertices.]]
+[[`G::edge_descriptor`] [The representative type of edges.]]
+[[`G::vertices_size_type`] [The unsigned integral type of the number of vertices.]]
+[[`G::edges_size_type`] [The unsigned integral type of the total number of edges.]]
+[[`G::incident_edges_size_type`] [The unsigned integral type of the number of edges incident to a vertex.]]
+
+[[`G::vertex_iterator`] [An iterator type for the vertices in the graph.]]
+[[`G::vertex_range`] [A range of vertex iterators.]]
+[[`G::edge_iterator`] [An iterator type for all edges in the graph.]]
+[[`G::edge_range`] [A range of edge iterators.]]
+[[`G::incident_edge_iterator`] [An iterator type for the edges incident to a vertex.]]
+[[`G::incident_edge_range`] [A range of incident edge iterators.]]
+[[`G::adjacent_vertex_iterator`] [An iterator type for the vertices adjacent to a given vertex.]]
+[[`G::adjacent_vertex_range`] [A range of adjacent vertex iterators.]]
+]
+The following section is a list of member functions of the graph.
+
+[heading Constructors and Destructor]
+
+ undirected_graph::undirected_graph()
+
+ undirected_graph::undirected_graph(undirected_graph const& g)
+
+ undirected_graph::~undirected_graph()
+
+[heading Adding Vertices]
+
+ vertex_descriptor add_vertex()
+
+Add an unlabeled vertex to the graph, returning the descriptor.
+
+ vertex_descriptor add_vertex(vertex_label const& l)
+
+Add a vertex with the label `l` to the graph, returning the descriptor.
+
+ vertex_descriptor add_vertex(vertex_key const& k, vertex_label const& l)
+
+Add a vertex to the map with the label `l` and associate it with the key `k`.
+
+[heading Accessing Vertices]
+
+ vertex_descriptor vertex(vertex_label const& l) const
+ vertex_descriptor vertex(verte_key const& k) const
+
+Return a vertex descriptor for the vertex identified by the given vertex label or
+key.
+
+[heading Removing Vertices]
+
+ void remove_vertex(vertex_descriptor v)
+ void remove_vertex(vertex_label const& l)
+ void remove_vertex(vertex_key const& k)
+
+Remove the given vertex or the vertex uniquely identified by the given label or
+key. All edges incident to the vertex are removed prior to the removal of the
+vertex.
+
+[heading Adding Edges]
+
+ void add_edge(vertex_descriptor u, vertex_descriptor v)
+ void add_edge(vertex_label const& p, vertex_label const& q)
+ void add_edge(vertex_key const& x, vertex_key const& y)
+
+[heading Accessing Edges]
+
+ edge_descriptor edge(vertex_descriptor u, vertex_descriptor v)
+ edge_descriptor edge(vertex_label const& p, vertex_label const& q)
+ edge_descriptor edge(vertex_key const& x, vertex_key const& y)
+
+Return a descriptor for the edge connecting the two vertices u and v. If no such
+edge exists, the returned descriptor is `null`.
+
+[heading Removing Edges]
+
+ void remove_edge(edge_descriptor e);
+
+Remove only the edge represented by the descriptor `e`.
+
+ void remove_edges(vertex_descriptor u, vertex_descriptor v)
+ void remove_edges(vertex_label const& p, vertex_label const& q)
+ void remove_edges(vertex_key const& x, vertex_key const& y)
+
+Remove all edges connective vertices u and v.
+
+ void remove_edges(vertex_descriptor v)
+ void remove_edges(vertex_label const& l)
+ void remove_edges(vertex_key const& k)
+
+Remove all edges incident to the vertex v.
+
+[heading Size and Degree]
+
+ vertices_size_type num_vertices() const
+
+ edges_size_type num_edges() const
+
+ incident_edges_size_type degree(vertex_descriptor v) const
+ incident_edges_size_type degree(vertex_label const& l) const
+ incident_edges_size_type degree(vertex_key const& k) const
+
+Return the degree of (number of incident edges to) the vertex v.
+
+[heading Iteration]
+
+ vertex_iterator begin_vertices() const
+ vertex_iterator end_vertices() const
+ vertex_range vertices() const
+
+Return iterators or an iterator range over the vertices of the graph.
+
+ edge_iterator begin_edges() const
+ edge_iterator end_edges() const
+ edge_range edges() const
+
+Return iterators or an iterator range over the edges of the graph.
+
+ incident_edge_iterator begin_incident_edges(vertex_descriptor v) const
+ incident_edge_iterator end_incident_edges(vertex_descriptor v) const
+ incident_edge_range incident_edges(vertex_descriptor v) const
+
+[endsect]

Added: sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/adj_matrix.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/adj_matrix.qbk 2008-09-12 14:36:30 EDT (Fri, 12 Sep 2008)
@@ -0,0 +1,4 @@
+
+[section Adjacency Matrix]
+Not implemented.
+[endsect]
\ No newline at end of file

Added: sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/algo/search.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/algo/search.qbk 2008-09-12 14:36:30 EDT (Fri, 12 Sep 2008)
@@ -0,0 +1,4 @@
+
+[section Search Algorithms]
+
+[endsect]
\ No newline at end of file

Added: sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/descriptors.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/descriptors.qbk 2008-09-12 14:36:30 EDT (Fri, 12 Sep 2008)
@@ -0,0 +1,58 @@
+
+
+[section Descriptors]
+The vertices and edges of the graph are accessible via descriptor objects. A
+descriptor is a lightweight, opaque reference to an object. All operations on
+these graphs are defined in terms of these descriptors. Methods for getting
+and using descriptors will be shown throughout this manual.
+
+Unlike iterators, descriptors cannot be used to access their referenced elements
+by themselves. They must be used in conjunction with the containers that return
+them to the program (i.e., the graph). However, descriptors are initialized to a
+`null` state when default cosntructed, and are implicitly castable to `bool`,
+allowing convenient pointer-like tests for existence.
+
+Descriptors are also [LessThanComparable] and [Hashable], allowing them to be
+used in sets and maps and their unordered variants.
+
+[note Pointers (to vertices or edges) are not generally used because a) it is not
+always possible to convert them to and from iterators in constant time, b) pointers
+generally assume a uniform, non-distributed address space, and c) some of the graph
+types do not actually have edge objects.]
+
+[heading Perspective]
+Descriptors can cause problems for programmers who expect a significant class
+interface for returned vertices and descriptors. In fact, most graph libraries
+prefer to return heavyweight vertex objects (or pointers to them) that define
+their own interfaces. This approach is not feasible when combined with the
+amount of genericism offered by this library.
+
+[heading Internals]
+Descriptors are an abstraction over iterators that do two things. First, they
+provide greater degrees of stability over insertions (especially with vectors).
+Second, they are entirely decoupled from the types of the containers that they
+reference into. Without this decoupling, it would be nearly impossible to define
+graph types because of mutual and cyclic type dependencies.
+
+As mentioned, descriptors can't be used without their originating containers.
+There are two functions that can be used to translate between a container's
+iterators and its descriptors: `make_descriptor` and `make_iterator`.
+
+``
+Descriptor make_descriptor(Container& cont, Iterator iter);
+``
+
+Given a container and a valid iterator into the container, return a descriptor
+over the referenced element. If `iter` is past the end, the returned descriptor
+is null.
+
+``
+Iterator make_iterator(Container& cont, Descriptor desc);
+``
+
+Given a container and a valid descriptor into the container, return an iterator
+to the described element. If `desc` is null, then the returned iterator is past
+the end of the container.
+
+[endsect]
+

Modified: sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/graphs.qbk
==============================================================================
--- sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/graphs.qbk (original)
+++ sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/graphs.qbk 2008-09-12 14:36:30 EDT (Fri, 12 Sep 2008)
@@ -15,118 +15,135 @@
     ]
 ]
 
-[def DefaultConstructible `DefaultConstructible]
-[def CopyConstructible `CopyConstructible`]
-[def LessThanComparable `LessThanComparable`]
-[def Hashable `Hashable`]
+[include macros.qbk]
 
-This graph library...
+[/ Concept Macros - apparently these have file scope. /]
+[def __DefaultConstructible__ [^DefaultConstructible]]
+[def __CopyConstructible__ [^CopyConstructible]]
+[def __LessThanComparable__ [^LessThanComparable]]
+[def __Semiregular__ [^Semiregular]]
+[def __Regular__ [^Regular]]
+[def __StrictWeakOrder__ [^StrictWeakOrder]]
+[def __Hashable__ [^Hashable]]
+[def __Allocator__ [^Allocator]]
+[def __Container__ [^Container]]
+[def __Sequence__ [^Sequence]]
+[def __FrontInsertionSequence__ [^FrontInsertionSequence]]
+[def __BackInsertionSequence__ [^BackInsertionSequence]]
+[def __AssociativeContainer__ [^AssociativeContainer]]
+[def __SimpleAssociativeContainer__ [^SimpleAssociativeContainer]]
+[def __PairAssociativeContainer__ [^PairAssociativeContainer]]
+[def __SortedAssociativeContainer__ [^SortedAssociativeContainer]]
+[def __HashedAssociativeContainer__ [^HashedAssociativeContainer]]
+[def __UniqueAssociativeContainer__ [^UniqueAssociativeContainer]]
+[def __MultipleAssociativeContainer__ [^MultipleAssociativeContainer]]
+
+[/ Graph pseudo-concepts /]
+[def __SimpleGraph__ [^SimpleGraph]]
+[def __Multigraph__ [^Multigraph]]
+
+[section Introduction]
+The goal of this Google Summer of Code project was to attempt a redesign of the
+interfaces of the Boost Graph Library to improve usability and to modernize some
+of the implementation with respect to a) newer libraries, b) newer C++ programming
+conventions and idioms, and c) new C++0x features (whatever was available in GCC
+during development).
+
+The design of the graph library is based on four major components: descriptors,
+property maps, data structures and algoriths. Briefly, descriptors are representatives
+of vertices and edges in graph implementations. Property maps abstract the reading
+and writing of properties of vertices and edges. Generic graph data structures define
+families of related implementations of the structure and storage of vertices and edges.
+Generic graph algorithms implement common operations on different kinds of graphs.
+
+As this is not currently intended to be a formal programming guide, but more of
+a "Getting to Know What's Here" document, discussion on the design and approaches
+to the library are woven throughout.
 
-[include descriptors.qbk]
+See the "Programmer's Guide" for a brief tour of the library.
+[endsect]
+
+[include guide.qbk]
+
+[section Graph Types]
+Unlike the previous version of the BGL, this library's take on graph types is that
+more is better. Rather than parameterize all structural aspects of a graph data
+structure's implementation, we created new graph types specific to the data structure.
+This allows us to provide a rich set of graph implementations whose parameters reflect
+those implementation options. Moreover, this allows developers to create custom graph
+implementations that optimize certain operations or have built-in properties that
+enable other operations.
+
+Graph data structures are organized by their implementation structure (list or matrix)
+and then by the features they offer. There are three kinds of graph types considered
+in this library:
+
+* ['Undirected] - An edge connects two vertices, there is no source or target vertex.
+* ['Directed] - An edge is directed from a source vertex to a target vertex.
+ * ['Unidirectional] - The graph only contains outward directed edges.
+ * ['Bidirectional] - The graph contains both inward and outward directed edges.
+
+[note At this time, the library provides only undirected and bidirectional adjacency
+lists, and the directed graph implementation is bidirectional only.]
+
+The generic graph implementations rely heavily on an abstraction known as /descriptors/.
+A descriptor is an opaque reference or representative of an object that is contained
+by another (such as a vertex or an edge). Descriptors can be thought of as a weak
+form of /iterator/ or (better yet) a /flyweight/ object. They differ in two respects:
+
+* A descriptor is not an iterator because a) it cannot be dereferenced to access
+the referenced object and b) it has no traversal semantics (increment, decrement).
+* A descriptor is not a flyweight because it does not act as a standin for the
+object it describes.
+* Unlike iterators and flyweights, a descriptors type is not dependant upon the
+value type of its container. A descriptor into a vector of integers is the same type
+as a descriptor into a vector of strings.
+* A descriptors can only be used by the object that contains the object being represented,
+and can be converted to and from iterators in constant time.
+* A descriptor is like pointers in that they are Regular, LessThanComparable, and
+Hashable, meaning that it can be used as a key for all standard associative
+containers.
+
+The interfaces of all graph types return and operate on vertex and edge descriptors.
+
+[include adj_list.qbk]
+[include adj_matrix.qbk]
+[endsect]
+
+[section Algorithms]
+The approach to algorithm design varies slightly from that of the BGL also. Rather
+than simply providing a single, heavily parameterized algorithm, this library treats
+encapsulates each algorithm in a "module", consisting of a core set of algorithms and
+an outer interface where appropriate. The inner core of each algorithm is typically
+heavily parameterized, but does not provide any default vaues for those parameters.
+The interface provides simpler means of accessing the core algorithm by providing
+defaults, overloads, and alternative functions. This design is typified by the search
+core, which implements breadth- and depth-first seaarches.
+
+As before, the graph algorithms are designed to use the visitor pattern to allow
+users to build custom actions into a predefined algorithm. This approach is extended,
+where appropriate, to include strategy parameters. A strategy parameter provides
+a means of modifying the behavior of an algorithm at specific points in the algorithm,
+called control points. Strategies typically return some boolean value to decide
+whether or not an action should be taken.
 
-[section Adjacency Lists]
-One of the most common and flexible graph data structures is the adjacency list.
-The adjacenct list component of this library provides implementations for both
-directed and undirected graphs. Adjacency list types can be defined as follows,
-depending on whether you want directed or undirected graphs.
-
-``
-typedef undirected_graph<VertexLabel, EdgeLabel, VertexSet, EdgeSet, Policies> Graph;
-typedef directed_graph<VertexLabel, EdgeLabel, VertexSet, EdgeSet, Policies> Graph;
-``
-
-Several graph types are provided to encapsulate common implementations.
-
-``
-typedef graph<VertexLabel, EdgeLabel> Graph; // A simple undirected graph
-typedef digraph<VertexLabel, EdgeLabel> Graph; // A simple directed graph
-``
-
-[section Vertex and Edge Labels]
-Vertex and Edge labels allow you to attach data to the vertices and edges of the
-graph in much the same manner as creating standard containers. In general, you
-can use almost any type as a label for vertices or edges, although they are
-required to be [DefaultConstructible] and [CopyConstructible] at a minimum. To
-explicitly specify the absence of type, you can use `none` as a value for that
-type.
-
-The choice of the `VertexSet` can also impose additional requirements on the
-vertex labels in your graph. If you choose `vertex_set` then the `VertexLabel`
-type must also be [LessThanComparable]. If you choose `vertex_unordered_set`,
-then the `VertexLabel` type must be [Hashable].
-
-Vertex properties are accessible via the `properties()` function:
-
-``
-vertex_label& Graph::properties(vertex_descriptor v);
-vertex_label const& Graph::properties(vertex_descriptor v) const;
-``
-
-[endsect]
-
-[section The Vertex Set]
-The vertex set component of the graph is responsible for the storage of vertices
-within the graph. In fact, The selection of `VertexSet` type helps to define the
-overall interface of the graph, based on the properties of the underlying container.
-
-There are a number of aspects to consider when selecting the vertex set for your
-graph: mutability, labels, queries, and performance. Here, mutabilty
-refers to the operations available for modifying the graph. Some vertex sets have
-restricted mutability due to performance constraints. Labeling refers to any
-additional constraints placed on the the `VertexLabel`. Specifically, labels can
-be unique via comparability or hashing. Some vertex sets disallow the use of the
-`none` type as a `VertexLabel`. Queryability is the ability to find vertices based
-on their labels. The performance profile describes the relative "classes" of
-performance for insert, remove, and find operations.
-
-There are essentially four distinct types of sets that can be selected: vector,
-list, set, and map. Each type vertex set has different profiles with respect to
-these aspects. There are multiple implementations of each.
-
-[heading Vertex Vector]
-``
- vertex_vector<Allocator = std::allocator>
-``
-
-* ['mutability] - Add only
-* ['labels] - Not unique, Allows `none`.
-* ['query] - Find first
-* ['performance] - Constant add, Linear find
-
-[heading Vertex List]
-``
- vertex_list<Allocator = std::allocator>
-``
-
-* ['mutability] - Add and Remove
-* ['labels] - Not unique, Allows `none`.
-* ['query] - Find first
-* ['performance] - Constant add and remove, Linear find
-
-[heading Vertex Set]
-``
- vertex_set<Comparator = std::less, Allocator = std::allocator>
-``
-
-* ['mutability] - Add and Remove
-* ['labels] - Sorted on [LessThanComparable], Not `none`.
-* ['query] - Find unique
-* ['performance] - Logarithmic add, remove, and find
-
-[heading Vertex Map]
-``
- vertex_map<Key, Comparator = st::less, Allocator = std::allocator>
-``
-* ['mutability] - Add and Remove
-* ['labels] - Mapped on [LessThanComparable] key, Not `none`
-* ['query] - Find unique
-* ['performance] - Logarithmic add, remove, and find
-
-[endsect]
-
-[section The Edge Set]
-The edge set component of the graph is responsible for defining how edges are
-stored in the graph.
+[section Search Algorithms]
+[include algo/search.qbk]
+[endsect]
+
+[section Shortest Path Algorithms]
+Not implemented.
+[endsect]
+
+[section Minimum Spanning Tree Algorithms]
+[endsect]
+Not implemented.
+[endsect]
+
+[section Details]
+[include descriptors.qbk]
 [endsect]
 
+[section Post-Mortem]
+What's good and bad about this implementation, and what's left to be done.
 [endsect]
\ No newline at end of file

Added: sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/guide.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/guide.qbk 2008-09-12 14:36:30 EDT (Fri, 12 Sep 2008)
@@ -0,0 +1,6 @@
+
+[section Programmer's Guide]
+
+This is an introductory guide to the new Graph library.
+
+[endsect]
\ No newline at end of file

Added: sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/html/boostbook.css
==============================================================================
--- (empty file)
+++ sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/html/boostbook.css 2008-09-12 14:36:30 EDT (Fri, 12 Sep 2008)
@@ -0,0 +1,610 @@
+/*=============================================================================
+ Copyright (c) 2004 Joel de Guzman
+ http://spirit.sourceforge.net/
+
+ Distributed under the Boost Software License, Version 1.0. (See accompany-
+ ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+=============================================================================*/
+
+/*=============================================================================
+ Body defaults
+=============================================================================*/
+
+ body
+ {
+ margin: 2em;
+ font-family: sans-serif;
+ }
+
+/*=============================================================================
+ Paragraphs and inline code
+=============================================================================*/
+
+ p
+ {
+ text-align: justify;
+ font-size: 12pt;
+ line-height: 1.25;
+ }
+
+ code
+ {
+ font-size: 11pt;
+ }
+
+/*=============================================================================
+ Program listings
+=============================================================================*/
+
+ /* Code on paragraphs -- Does not seem to match anything */
+ p tt.computeroutput
+ {
+ font-size: 11qpt;
+ }
+
+ pre.synopsis
+ {
+ /* font-size: 90%; -- ANS */
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+ }
+
+ .programlisting,
+ .screen
+ {
+ font-size: 11pt;
+ display: block;
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+ }
+
+ /* Program listings in tables don't get borders */
+ td .programlisting,
+ td .screen
+ {
+ margin: 0pc 0pc 0pc 0pc;
+ padding: 0pc 0pc 0pc 0pc;
+ }
+
+/*=============================================================================
+ Headings
+=============================================================================*/
+
+ h1, h2, h3, h4, h5, h6
+ {
+ text-align: left;
+ margin: 1em 0em 0.5em 0em;
+ font-weight: bold;
+ }
+
+ h1 { font: 140% }
+ h2 { font: bold 140% }
+ h3 { font: bold 130% }
+ h4 { font: bold 120% }
+ h5 { font: italic 110% }
+ h6 { font: italic 100% }
+
+ /* Top page titles */
+ title,
+ h1.title,
+ h2.title
+ h3.title,
+ h4.title,
+ h5.title,
+ h6.title,
+ .refentrytitle
+ {
+ font-weight: bold;
+ margin-bottom: 1pc;
+ }
+
+ h1.title, h2.title * code { font-size: 140% }
+ h2.title, h2.title * code { font-size: 140% }
+ h3.title, h3.title * code { font-size: 130% }
+ h4.title, h4.title * code { font-size: 120% }
+ h5.title, h5.title * code { font-size: 110% }
+ h6.title, h6.titel * code { font-size: 100% }
+
+ .section h1
+ {
+ margin: 0em 0em 0.5em 0em;
+ font-size: 140%;
+ }
+
+ .section h2 { font-size: 140% }
+ .section h3 { font-size: 130% }
+ .section h4 { font-size: 120% }
+ .section h5 { font-size: 110% }
+ .section h6 { font-size: 100% }
+
+ /* Code on titles */
+ h1 tt.computeroutput { font-size: 140% }
+ h2 tt.computeroutput { font-size: 140% }
+ h3 tt.computeroutput { font-size: 130% }
+ h4 tt.computeroutput { font-size: 120% }
+ h5 tt.computeroutput { font-size: 110% }
+ h6 tt.computeroutput { font-size: 100% }
+
+/*=============================================================================
+ Author
+=============================================================================*/
+
+ h3.author
+ {
+ font-size: 100%
+ }
+
+/*=============================================================================
+ Lists
+=============================================================================*/
+
+ li
+ {
+ line-height: 1.5;
+ }
+
+ /* Unordered lists */
+ ul
+ {
+ text-align: justify;
+ }
+
+ /* Ordered lists */
+ ol
+ {
+ text-align: justify;
+ }
+
+/*=============================================================================
+ Links
+=============================================================================*/
+
+ a
+ {
+ text-decoration: none; /* no underline */
+ }
+
+ a:hover
+ {
+ text-decoration: underline;
+ }
+
+/*=============================================================================
+ Spirit style navigation
+=============================================================================*/
+
+ .spirit-nav
+ {
+ text-align: right;
+ }
+
+ .spirit-nav a
+ {
+ color: white;
+ padding-left: 0.5em;
+ }
+
+ .spirit-nav img
+ {
+ border-width: 0px;
+ }
+
+/*=============================================================================
+ Copyright footer
+=============================================================================*/
+ .copyright-footer
+ {
+ text-align: right;
+ font-size: 70%;
+ }
+
+ .copyright-footer p
+ {
+ text-align: right;
+ font-size: 80%;
+ }
+
+/*=============================================================================
+ Table of contents
+=============================================================================*/
+
+ .toc
+ {
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.1pc 1pc 0.1pc 1pc;
+ line-height: 1.15;
+ }
+
+ .boost-toc
+ {
+ float: right;
+ padding: 0.5pc;
+ }
+
+/*=============================================================================
+ Tables
+=============================================================================*/
+
+ .table-title,
+ div.table p.title
+ {
+ margin-left: 4%;
+ padding-right: 0.5em;
+ padding-left: 0.5em;
+ }
+
+ .informaltable table,
+ .table table
+ {
+ width: 92%;
+ margin-left: 4%;
+ margin-right: 4%;
+ }
+
+ div.informaltable table,
+ div.table table,
+ table.table
+ {
+ padding: 4px;
+ }
+
+ /* Table Cells */
+ div.informaltable table tr td,
+ div.table table tr td,
+ {
+ padding: 0.5em;
+ text-align: left;
+ font-size: 10pt;
+ }
+
+ div.informaltable table tr th,
+ div.table table tr th
+ {
+ padding: 0.5em 0.5em 0.5em 0.5em;
+ border: 1pt solid white;
+ font-size: 80%;
+ }
+
+ table.simplelist
+ {
+ width: auto !important;
+ margin: 0em !important;
+ padding: 0em !important;
+ border: none !important;
+ }
+ table.simplelist td
+ {
+ margin: 0em !important;
+ padding: 0em !important;
+ text-align: left !important;
+ font-size: 9pt !important;
+ border: none !important;
+ }
+
+ /** ANS -- overload how table.tables render their cells. */
+ table.table tr td p
+ {
+ font-size: 11pt;
+ text-align: left;
+ padding: 0.25em;
+ }
+
+/*=============================================================================
+ Blurbs
+=============================================================================*/
+
+ /*
+ * A little bit smaller than the main text.
+ */
+ div.note,
+ div.tip,
+ div.important,
+ div.caution,
+ div.warning,
+ p.blurb
+ {
+ /* font-size: 9pt; -- ANS (this doesn't match anything) */
+ font-size: 10pt;
+ line-height: 1.2;
+ display: block;
+ margin: 1pc 4% 0pc 4%;
+ padding: 0.5pc 0.5pc 0.5pc 0.5pc;
+ }
+
+ p.blurb img
+ {
+ padding: 1pt;
+ }
+
+/*=============================================================================
+ Variable Lists
+=============================================================================*/
+
+ /* Make the terms in definition lists bold */
+ div.variablelist dl dt,
+ span.term
+ {
+ font-weight: bold;
+ font-size: 10pt;
+ }
+
+ div.variablelist table tbody tr td
+ {
+ text-align: left;
+ vertical-align: top;
+ padding: 0em 2em 0em 0em;
+ font-size: 10pt;
+ margin: 0em 0em 0.5em 0em;
+ line-height: 1;
+ }
+
+ div.variablelist dl dt
+ {
+ margin-bottom: 0.2em;
+ }
+
+ div.variablelist dl dd
+ {
+ margin: 0em 0em 0.5em 2em;
+ font-size: 10pt;
+ }
+
+ div.variablelist table tbody tr td p,
+ div.variablelist dl dd p
+ {
+ margin: 0em 0em 0.5em 0em;
+ line-height: 1;
+ }
+
+/*=============================================================================
+ Misc
+=============================================================================*/
+
+ /* Title of books and articles in bibliographies */
+ span.title
+ {
+ font-style: italic;
+ }
+
+ span.underline
+ {
+ text-decoration: underline;
+ }
+
+ span.strikethrough
+ {
+ text-decoration: line-through;
+ }
+
+ /* Copyright, Legal Notice */
+ div div.legalnotice p
+ {
+ text-align: left
+ }
+
+/*=============================================================================
+ Colors
+=============================================================================*/
+
+ @media screen
+ {
+ body {
+ background-color: #FFFFFF;
+ }
+
+ /* Links */
+ a
+ {
+ color: #005a9c;
+ }
+
+ a:visited
+ {
+ color: #9c5a9c;
+ }
+
+ h1 a, h2 a, h3 a, h4 a, h5 a, h6 a,
+ h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover,
+ h1 a:visited, h2 a:visited, h3 a:visited, h4 a:visited, h5 a:visited, h6 a:visited
+ {
+ text-decoration: none; /* no underline */
+ color: #000000;
+ }
+
+ /* Syntax Highlighting */
+ .keyword { color: #0000AA; }
+ .identifier { color: #000000; }
+ .special { color: #707070; }
+ .preprocessor { color: #402080; }
+ .char { color: teal; }
+ .comment { color: #800000; }
+ .string { color: teal; }
+ .number { color: teal; }
+ .white_bkd { background-color: #FFFFFF; }
+ .dk_grey_bkd { background-color: #999999; }
+
+ /* Copyright, Legal Notice */
+ .copyright
+ {
+ color: #666666;
+ font-size: small;
+ }
+
+ div div.legalnotice p
+ {
+ color: #666666;
+ }
+
+ /* Program listing */
+ pre.synopsis
+ {
+ border: 1px solid #DCDCDC;
+ }
+
+ .programlisting,
+ .screen
+ {
+ border: 1px solid #DCDCDC;
+ }
+
+ td .programlisting,
+ td .screen
+ {
+ border: 0px solid #DCDCDC;
+ }
+
+ /* Blurbs */
+ div.note,
+ div.tip,
+ div.important,
+ div.caution,
+ div.warning,
+ p.blurb
+ {
+ border: 1px solid #DCDCDC;
+ }
+
+ /* Table of contents */
+ .toc
+ {
+ border: 1px solid #DCDCDC;
+ }
+
+ /* Tables */
+ div.informaltable table tr td,
+ div.table table tr td
+ {
+ border: 1px solid #DCDCDC;
+ }
+
+ div.informaltable table tr th,
+ div.table table tr th
+ {
+ background-color: #F0F0F0;
+ border: 1px solid #DCDCDC;
+ }
+
+ .copyright-footer
+ {
+ color: #8F8F8F;
+ }
+
+ /* Misc */
+ span.highlight
+ {
+ color: #00A000;
+ }
+ }
+
+ @media print
+ {
+ /* Links */
+ a
+ {
+ color: black;
+ }
+
+ a:visited
+ {
+ color: black;
+ }
+
+ .spirit-nav
+ {
+ display: none;
+ }
+
+ /* Program listing */
+ pre.synopsis
+ {
+ border: 1px solid gray;
+ }
+
+ .programlisting,
+ .screen
+ {
+ border: 1px solid gray;
+ }
+
+ td .programlisting,
+ td .screen
+ {
+ border: 0px solid #DCDCDC;
+ }
+
+ /* Table of contents */
+ .toc
+ {
+ border: 1px solid gray;
+ }
+
+ .informaltable table,
+ .table table
+ {
+ border: 1px solid gray;
+ border-collapse: collapse;
+ }
+
+ /* Tables */
+ div.informaltable table tr td,
+ div.table table tr td
+ {
+ border: 1px solid gray;
+ }
+
+ div.informaltable table tr th,
+ div.table table tr th
+ {
+ border: 1px solid gray;
+ }
+
+ table.simplelist tr td
+ {
+ border: none !important;
+ }
+
+ /* Misc */
+ span.highlight
+ {
+ font-weight: bold;
+ }
+ }
+
+/*=============================================================================
+ Images
+=============================================================================*/
+
+ span.inlinemediaobject img
+ {
+ vertical-align: middle;
+ }
+
+ /* ANS */
+ div.caption p
+ {
+ text-align: center;
+ }
+
+/*==============================================================================
+ Super and Subscript: style so that line spacing isn't effected, see
+ http://www.adobe.com/cfusion/communityengine/index.cfm?event=showdetails&productId=1&postId=5341
+==============================================================================*/
+
+sup,
+sub {
+ height: 0;
+ line-height: 1;
+ vertical-align: baseline;
+ _vertical-align: bottom;
+ position: relative;
+
+}
+
+sup {
+ bottom: 1ex;
+}
+
+sub {
+ top: .5ex;
+}
+

Added: sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/macros.qbk
==============================================================================
--- (empty file)
+++ sandbox/SOC/2008/graphs/trunk/libs/graphs/doc/macros.qbk 2008-09-12 14:36:30 EDT (Fri, 12 Sep 2008)
@@ -0,0 +1,23 @@
+
+[/
+ Implements a centered figure with a caption. This is pretty lightweight and
+ needs some assistance from CSS. The caption can be matched with the selector
+ "div.caption p".
+
+ For right now, I'm just centering the caption, and making forcing it to be
+ bold within the template call. I think that this allows a wider range of
+ flexibility for formatting within the caption (although I could be wrong).
+ Unfortunately, I don't have anything that links here.
+/]
+[template figure[id path caption]
+'''
+<mediaobject id="'''[id]'''">
+ <imageobject>
+ <imagedata fileref="'''[path]'''" align="center"/>
+ </imageobject>
+ <caption>
+ <para>'''[caption]'''</para>
+ </caption>
+</mediaobject>
+'''
+]
\ No newline at end of file


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk