diff options
author | nobody <nobody@localhost> | 2001-01-10 18:29:12 +0000 |
---|---|---|
committer | nobody <nobody@localhost> | 2001-01-10 18:29:12 +0000 |
commit | 331a78a2848945562d611a876c73a65c2051b4f0 (patch) | |
tree | 9dc07c79d448a4f5d00c7ea7bf28f920ab119c0c | |
parent | ce5e16b6ae28e66369cdcfc6c416db64fd0298ba (diff) | |
parent | 99d4d7f6e9e3e99ad3caf6877865b79be0123fa6 (diff) | |
download | boost-331a78a2848945562d611a876c73a65c2051b4f0.tar.gz |
This commit was manufactured by cvs2svn to create tag
'Version_1_20_1'.
[SVN r8548]
112 files changed, 7528 insertions, 0 deletions
diff --git a/.gitmodules b/.gitmodules index d72a772305..856f22872c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,3 +2,83 @@ path = libs/smart_ptr url = ../smart_ptr.git fetchRecurseSubmodules = on-demand +[submodule "type_traits"] + path = libs/type_traits + url = ../type_traits.git + fetchRecurseSubmodules = on-demand +[submodule "utility"] + path = libs/utility + url = ../utility.git + fetchRecurseSubmodules = on-demand +[submodule "timer"] + path = libs/timer + url = ../timer.git + fetchRecurseSubmodules = on-demand +[submodule "python"] + path = libs/python + url = ../python.git + fetchRecurseSubmodules = on-demand +[submodule "graph"] + path = libs/graph + url = ../graph.git + fetchRecurseSubmodules = on-demand +[submodule "array"] + path = libs/array + url = ../array.git + fetchRecurseSubmodules = on-demand +[submodule "functional"] + path = libs/functional + url = ../functional.git + fetchRecurseSubmodules = on-demand +[submodule "random"] + path = libs/random + url = ../random.git + fetchRecurseSubmodules = on-demand +[submodule "compose"] + path = libs/compose + url = ../compose.git + fetchRecurseSubmodules = on-demand +[submodule "iterator"] + path = libs/iterator + url = ../iterator.git + fetchRecurseSubmodules = on-demand +[submodule "concept_check"] + path = libs/concept_check + url = ../concept_check.git + fetchRecurseSubmodules = on-demand +[submodule "rational"] + path = libs/rational + url = ../rational.git + fetchRecurseSubmodules = on-demand +[submodule "detail"] + path = libs/detail + url = ../detail.git + fetchRecurseSubmodules = on-demand +[submodule "disjoint_sets"] + path = libs/disjoint_sets + url = ../disjoint_sets.git + fetchRecurseSubmodules = on-demand +[submodule "conversion"] + path = libs/conversion + url = ../conversion.git + fetchRecurseSubmodules = on-demand +[submodule "static_assert"] + path = libs/static_assert + url = ../static_assert.git + fetchRecurseSubmodules = on-demand +[submodule "regex"] + path = libs/regex + url = ../regex.git + fetchRecurseSubmodules = on-demand +[submodule "property_map"] + path = libs/property_map + url = ../property_map.git + fetchRecurseSubmodules = on-demand +[submodule "integer"] + path = libs/integer + url = ../integer.git + fetchRecurseSubmodules = on-demand +[submodule "config"] + path = libs/config + url = ../config.git + fetchRecurseSubmodules = on-demand diff --git a/README b/README new file mode 100644 index 0000000000..5f109fd009 --- /dev/null +++ b/README @@ -0,0 +1,11 @@ +For the most current version of Boost libraries and documentation, see: + + http://www.boost.org + +Boost documentation is in HTML format. + +The highest level directory (which contains this README file) should have a file index.htm +with links to all documentation. When viewing index.htm with a web browser, follow the +"Libraries" link on the navigation bar for information on building boost libraries for +your particular compiler and operating system. + diff --git a/c++boost.gif b/c++boost.gif Binary files differnew file mode 100644 index 0000000000..58be431a3f --- /dev/null +++ b/c++boost.gif diff --git a/development/more/directory-structure.htm b/development/more/directory-structure.htm new file mode 100644 index 0000000000..2c9af19a66 --- /dev/null +++ b/development/more/directory-structure.htm @@ -0,0 +1,742 @@ +<html> + +<head> +<meta http-equiv="Content-Type" +content="text/html; charset=iso-8859-1"> +<meta name="Template" +content="C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html.dot"> +<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0"> +<title></title> +</head> + +<body bgcolor="#FFFFFF" link="#0000FF" vlink="#800080"> + +<h2 align="center">A Proposal for the Boost Directory Structure</h2> + +<p align="center">By John Maddock.</p> + +<p>The following proposal consists of three sections: A list of +requirements and objectives that the chosen structure must meet, +a set of tools to facilitate working with boost, and an actual +proposal for a structure that meets those requirements. In the +past I have argued vociferously for a "do as little as +possible" approach, however I have somewhat surprised myself +by coming out in favour of a radical reorganisation here. In many +ways though, the proposed directory structure is less important +than its ability to meet the requirements listed below, nor is it +the only structure that could arguably meet these requirements (especially +as some requirements are contradictory). Finally a couple of +caveats: All opinions expressed herein are my own; all ideas +expressed herein belong to over people (especially the good ones!). +Where possible credits are given, but my memory is far from +infallible so speak up if you've been missed out.</p> + +<h2 align="center">Requirements</h2> + +<h3>Consistency</h3> + +<blockquote> + <p><b>Comment</b>: this should speak for itself.</p> +</blockquote> + +<h3>Discoverability</h3> + +<p>That is a casual user browsing the directory structure should +be able to immediately tell what belongs where.</p> + +<blockquote> + <p><b>Rationale</b>: some users read the documentation, + others wander around aimlessly saying: "I wonder what's + in here?", speak up if you recognise anyone!</p> + <p><b>Rationale</b>: automated tools should be able to glean + most of the information they need direct from the directory + structure.</p> + <p><b>Comment</b>: This is probably the most important + requirement and guides the choice of many others.</p> +</blockquote> + +<h3>Boost is a single library</h3> + +<blockquote> + <p>From an end users perspective boost should appear to be a + single library, with a single integrated build process etc.</p> + <p><b>Rationale</b>: This makes life much more comfortable + for end uses.</p> +</blockquote> + +<h3>Boost is a collection of separate libraries</h3> + +<blockquote> + <p><b>Rationale</b>: some libraries have an existence of + their own outside of boost, this should be able to continue.</p> + <p><b>Rationale</b>: different developers maintain individual + boost libraries.</p> + <p><b>Rationale</b>: as boost grows it may be necessary to + split the library into multiple zip file downloads, each + download should encapsulate one domain, and provide all the + files necessary for that domain (that may mean that some + files appear in more than one zip file).</p> + <p><b>Rationale</b>: some users will want to split off (and + maybe freeze) those parts of boost that are being used by a + particular project. These sub-libraries can then be checked + into the users own version control system (for example into a + local cvs repository as a vendor branch), and maintained + alongside the users own source for that project.</p> + <p><b>Implication:</b> that there exists some mechanism for + locating and separating off all the files associated with a + particular boost library, this should also take into account + dependencies (both for headers and for binary dependencies).</p> +</blockquote> + +<h3>Individual boost libraries can be checked out from the cvs +repository</h3> + +<blockquote> + <p>For example "<code>cvs checkout regex</code>" + would check out the regex library alone.</p> + <p><b>Rationale</b>: This makes maintenance much easier + especially when working with cvs-branches.</p> + <p><b>Implication</b>: we could isolate libraries into + separate directories, however that's only a partial solution + which takes no account of library dependencies (something + that's likely to become increasingly important). A better + solution is to use cvs module-aliases: as a test case I've + defined the regex library as a module-alias (this seems to + work very well). In this case I had to specify dependencies + by hand (an error prone process), much better would be a tool + that produced a list of library aliases to insert directly + into the cvs modules file.</p> +</blockquote> + +<h3>Boost libraries can have dependencies to other libraries</h3> + +<blockquote> + <p>There are three kinds of dependency possible:</p> + <ol> + <li>Libraries may depend upon the headers from other + boost libraries; these dependencies can be worked out + automatically.</li> + <li>Libraries may depend upon binaries from other boost + libraries; these dependencies can be worked out + automatically (hint: if library X depends upon header + H, and header H is from a library Y which has + mandatory source code associated with it, then there + is a binary dependency from X to Y).</li> + <li>Some domain specific libraries may depend upon third + party libraries (the python library for example). + These dependencies can not be deduced, and will + require meta-data to describe.</li> + </ol> + <p><b>Rationale: </b>these dependencies already exist in the + boost library.</p> +</blockquote> + +<h3>Usable "as is"</h3> + +<blockquote> + <p>That is the library should be usable directly from the + checked out cvs tree, or the extracted zip file, without a + mandatory install process.</p> + <p><b>Rationale:</b> For single user installations it is + sufficient and often easier to work directly from the zip/cvs + structure.</p> + <p><b>Rationale: </b>For "occasional developers" + this simplifies their ability to port/debug parts of the + library, and then submit patches based on changes made, + without having to get involved with "wrapper compilers" + and other tools that have been suggested, which may or may + not function on their platform with their toolset.</p> + <p><b>Implication:</b> that all header files are located + together, and not split between multiple library paths.</p> + <p><b>Comments:</b> during the recent discussion it was + suggested splitting the header files into separate + directories under "boost-root/src/libname/boost", + however this involves specifying a large number of -I options + on the command line in order to be able to use boost direct + from the cvs tree. One suggested workaround was to use a + wrapper-compiler to pass the long list of includes to the + compiler semi-automatically. However some compilers are + integrated with their respective IDE's (this would make boost + almost impossible to use from that IDE), other platforms/compilers + have a restricted command line length (mingw32 is a + particular culprit), the command line in such cases could + easily become longer than the maximum permitted.</p> +</blockquote> + +<h3>Header include mechanism reflects library name</h3> + +<blockquote> + <p>We currently use:</p> + <p><code>#include <boost/something.hpp></code></p> + <p>which immediately informs a casual browser of the code + that something.hpp is a part of the boost library and + separates it from:</p> + <p><code>#include <rw/thread.h> // this is Rogue Wave + library</code></p> + <p><b>Rationale</b>: This has worked well up to now and + should be continued.</p> + <p><b>Implication</b>: The boost-root/boost/ directory must + continue to exist (although there are possible arguments in + favour of making it boost-root/include/boost).</p> +</blockquote> + +<h3>Libraries can have "non-end user" header files.</h3> + +<blockquote> + <p>There are several kinds of header that come into this + category:</p> + <blockquote> + <p><b>Power user headers</b>: headers that should only be + used by experts.</p> + <p><b>Headers for library reuse</b>: these headers can be + used by other boost libraries, but should not be used by + end users.</p> + <p><b>Domain specific headers</b>: large domain specific + libraries may have a large number of headers that should + not make it into the main boost-root/boost/ header + directory (graph for example).</p> + <p><b>Implementation headers</b>: libraries may have + headers that contain implementation code, these headers + should never be included by anything except other headers + <i>in this library</i>.</p> + </blockquote> + <p><b>Implication: </b>the main header directory may contain + sub-directories as follows:</p> + <blockquote> + <p>boost-root/boost/library-name/ for all non-end user + headers, including domain specific headers.</p> + <p>boost-root/boost/library-name/detail/ for all + implementation detail headers.</p> + </blockquote> +</blockquote> + +<h3>Libraries can be combined into domains</h3> + +<blockquote> + <p>For example we may want to combine multiple math-related + libraries into a single "numeric" domain. In this + case each library in the domain would have it's own directory + under the domain name directory - for example headers for the + rational library may end up in boost-root/boost/numeric/rational/.</p> + <p><b>Rationale</b>: the aim here is to prevent the number of + top level libraries growing to an unmanageable number, and to + allow a logical group of libraries to be accessed with a + single name (for cvs checkouts or for building part of boost).</p> +</blockquote> + +<h3>Root directory name reflects boost version</h3> + +<blockquote> + <p>That is the name of the root directory in the zip file + reflects the boost version number "boost_1_1_9/" + etc, subsequent directories - like the boost header file + directory - then split off from this.</p> + <p><b>Rationale: </b>Allows developers to have multiple + versions coexisting on their machine within a single + directory structure, developers can switch between versions + with a by changing their compilers include and library search + paths only.</p> +</blockquote> + +<h3>Consistent handling of development code</h3> + +<blockquote> + <p>If there exists development or non-reviewed code in the + cvs tree then it should not interfere with release code or + exist in the same directory tree as the release code. Nor + should development code appear in zip files.</p> + <p><b>Rationale</b>: developers will typically work with + either the latest release code, or the latest development + code, they should be able to switch between them fairly + easily.</p> + <p><b>Rationale</b>: end users don't generally need to see + development code, it unnecessarily duplicates what's already + in the library and may lead to confusion as to what's release + code and what's still in development.</p> + <p><b>Implication</b>: There are a couple of ways of dealing + with this.</p> + <blockquote> + <p><b>Method 1</b>: provide a subdirectory "<code>boost-root/development/library-name/</code>" + that internally mirrors the directory structure of <code>boost-root/</code>, + to contain development code for library "library-name". + This has the advantage of being easy to work with, but + requires setting multiple include and library search + paths, it also complicates multiple development versions + of the same library (for example multiple ports to new + platforms may proceed in parallel).</p> + <p><b>Method 2</b>: provide a separate top-level CVS + directory for development code, development code could + then be checked out with "<code>cvs checkout + development"</code> instead of "<code>cvs + checkout boost"</code>, otherwise this method is the + same as Method 1 above, and has the same pros and cons.</p> + <p><b>Method 3</b>: use a cvs branch for development work. + This allows multiple development efforts to proceed in + parallel, but may be harder to work with and keep in + synch with the main branch.</p> + </blockquote> + <p>Ideally<b> </b>I see no reason why either method 1 or 2 + can't coexist with method 3, depending which method is easier + for the task in hand. Personally I prefer (2) to (1), but + that's just personal preference.</p> +</blockquote> + +<h3>Mandatory Source code is centrally located</h3> + +<blockquote> + <p>That is that there is some central directory (let's call + it boost-root/src/) that contains all mandatory source files + for a particular library in its sub-directories: boost-root/src/library1/, + boost-root/src/library2/ etc.</p> + <p><b>Rationale: </b>This ensures that the source is easily + discoverable by the user; for example if a user suspects that + there may be a bug in library X, and decides to try and debug + the problem, they may want to add all the source code for + library X directly to their project to facilitate debugging. + (I appreciate that the build process <i>may</i> provide + debugging versions of the library, but it is still often + easier to add the source direct to the IDE's project, + depending upon how well the IDE handles debugging of external + libraries).</p> + <p><b>Rationale: </b>some IDE's have search paths for source + files as well as headers etc, this structure shortens the + paths to mandatory source files (this is more of a feature + request than a requirement).</p> +</blockquote> + +<h3>Directories containing documentation contain an index.html +file, and nothing but documentation</h3> + +<blockquote> + <p><b>Rationale</b>: Some file browsers (KFM for example) + will automatically display documentation when they see either + index.htm or index.html in the current directory. Any other + files located in that directory effectively become "hidden" + from the user. Whether this is an annoyance or a great + feature depends upon your point of view. Separating + documentation into it's own sub-directory solves this problem + (it happens to make installation of the documentation easier + as well).</p> + <p><b>Footnote</b>: actually KFM is usually quite intelligent + about displaying documentation, however it does sometimes get + it wrong.</p> +</blockquote> + +<h3>Boost supports an integrated build process</h3> + +<blockquote> + <p><b>Rationale</b>: Currently most boost libraries are + "headers only", those that are not have their own + build processes or none at all. This is confusing for the end + user, especially as boost is likely to get much larger.</p> +</blockquote> + +<h3>Boost supports building of separate sub-libraries</h3> + +<blockquote> + <p><b>Rationale</b>: Building boost as a single monolithic + library is likely to put end users off - especially as boost + grows in size - few users will use all of boost in a single + project (even if they use all of it at some time or another).</p> + <p><b>Implication</b>: Build each boost library separately + using a consistent naming scheme incorporating the library + name and the compiler name: libboost_timer_gcc.so, libboost_regex_gcc.so, + lib_boost_thread_gcc.so etc. Provide a monolithic version of + the library as an option for those that want a simple life (this + is mainly more appropriate for static libraries where unused + library code doesn't make it into the executable).</p> +</blockquote> + +<h3>Boost supports multiple compiler build options.</h3> + +<blockquote> + <p><b>Rationale</b>: some compilers ship with multiple run-time + libraries. For example the Borland C++ compiler comes with 6 + different runtimes, any third party libraries must be built + with the same runtime options as the executable to which it + will be linked, failure to observe this rule leads to hard to + track down runtime crashes.</p> + <p><b>Implication</b>: boost libraries must each be built + multiple times with the same runtime variants that the + compiler ships with. As before name mangling separates the + variants: </p> +</blockquote> + +<pre> boost_regex_bc55_cw.lib + boost_regex_bc55_cwi.lib + boost_regex_bc55_cwi.dll + boost_regex_bc55_cwm.lib + boost_regex_bc55_cwmi.lib + boost_regex_bc55_cwmi.dll + boost_regex_bc55_cp.lib + boost_regex_bc55_cpi.lib + boost_regex_bc55_cpi.dll</pre> + +<blockquote> + <p>(for non-Borland users the suffixes chosen here reflect + the names of Borland's own runtime libraries).</p> +</blockquote> + +<h3>Boost's build system uses the minimal amount of meta-data +required.</h3> + +<blockquote> + <p><b>Rationale</b>: some meta-data is likely to be required, + but to reduce maintenance requirements this should be as + small as possible. Generally speaking the smaller the meta-data + requirement the more likely it is that the build system is in + synch with the library. The worst case would be hand-crafted + makefiles (hard to maintain), the best case no meta-data at + all; for example the directory structure describes the + library well enough that makefiles (or their equivalent) can + be automatically generated.</p> +</blockquote> + +<h3>Boost supports installation to a central location</h3> + +<blockquote> + <p><b>Rationale</b>: most unix variants more or less require + an install step before using third party libraries, this also + allows network installs (for multiple compilers and/or + platforms if required), from a single source tree.</p> +</blockquote> + +<blockquote> + <p><b>Implication</b>: Keep the boost directory structure as + close as possible to the install structure to simplify the + installation process (strictly speaking this is not an + absolute requirement, but cross-platform installation is hard + enough with making it any harder than it needs to be). The + easiest way is to keep the documentation/header/build trees + separate.</p> +</blockquote> + +<h3>The boost directory structure should be "optimally +branched"</h3> + +<blockquote> + <p>This is a nebulous requirement that is based as much on + personal preference as anything else.</p> + <p><b>Rationale</b>: the directory structure is more "discoverable" + if it branches consistently - that is with no directories + with a massive number of entries.</p> + <p><b>Implication</b>: where appropriate combine related + libraries into domains.</p> + <p><b>Implication</b>: avoid directories with a single sub-directory + entry (redundancy).</p> +</blockquote> + +<h2 align="center">Proposed tools to aid boost management (build +system)</h2> + +<p>While writing the requirements above one theme kept +reoccurring; that of interdependency of boost libraries, and the +need for an automated tool to deal with this problem. In fact +from a code-reuse point of view, we need a library that describes +the boost library and determines library dependencies that can +then be reused in multiple tools. In my view the gains in ease of +management, and automatic generation of makefiles etc, means that +these tools should be developed regardless of the actual +directory structure chosen (although the code will probably be +dependent upon the directory structure chosen).</p> + +<h3>Dependency library</h3> + +<blockquote> + <p>This library would define two types:</p> + <p><b>Library</b>: defines the files that belong to a + particular library, plus header file dependencies and a list + of binary dependencies to other boost libraries.</p> + <p><b>Libraries</b>: a collection of Library objects, also + maintains a database of which header belongs to which library + (used to calculate binary dependencies).</p> + <p>As far as is possible, these types should be able to load + themselves directly from the boost directory structure, with + only a minimal amount of meta-data used to describe the + unusual cases.</p> +</blockquote> + +<h3>Paths library</h3> + +<p>In order for the dependency library to do it's job it is +necessary to iterate over a directory structure, join and split +path names, and convert path names to/from a platform specific +format. For example to insert relative-paths into makefiles which +may be used on platforms other than the one on which the makefile +is generated. Some, but by no means all, of this functionality is +already covered by Dietmar Kühl's dir_it library.</p> + +<h3>Automatic alias generation</h3> + +<p>This is a short program that just iterates through a Libraries +collection and prints out the dependencies, so that the result +can be cut and pasted into the cvs modules file.</p> + +<h3>Boost distiller</h3> + +<p>This is almost the same program as the alias generator, but +copies files to a new location instead of printing them out. Used +to "distil" out a subset of the boost library (including +dependencies). This can be used to: split boost into multiple (domain +specific) zip files for easier download, or split out that subset +of boost that is being used by a particular project (for +integration with the project without getting the whole of boost).</p> + +<h3>Build system</h3> + +<p>By combining the description of the boost library contained in +a Libraries object with a description of the compiler/platform in +use, it is possible to do one of two things: directly build the +library, or output compiler/platform specific makefiles for +distribution with boost. For brevity I'm going to skip over a +description of this here - my pencil and paper sketch has a list +of around 14 points of variation between compilers, and another +list of 7 options for each compiler configuration (release, debug, +static, dynamic etc). Probably even this fairly long list is not +complete.</p> + +<p>I'm assuming that the build system will probably output +makefiles in the first instance; apart from anything else, most +compilers come with some kind of make, using this avoids the need +for the end user to have to build/install any tools that do not +ship with their compiler. Here I'm assuming that the boost +library maintainers periodically generate the makefiles, and then +ship them with the library.</p> + +<h2 align="center">The directory structure</h2> + +<table border="0" cellpadding="7" cellspacing="1" width="100%"> + <tr> + <td valign="top" width="6%"> </td> + <td valign="top" width="44%" bgcolor="#008080">Directory</td> + <td valign="top" width="43%" bgcolor="#008080">Description</td> + <td valign="top" width="7%"> </td> + </tr> + <tr> + <td valign="top" width="6%"> </td> + <td valign="top" width="44%" bgcolor="#C0C0C0">Boost-root/boost/</td> + <td valign="top" width="43%" bgcolor="#C0C0C0">All entry + point boost headers, mainly these should be called "library-name.hpp"</td> + <td valign="top" width="7%"> </td> + </tr> + <tr> + <td valign="top" width="6%"> </td> + <td valign="top" width="44%" bgcolor="#C0C0C0">Boost-root/boost/library-name/</td> + <td valign="top" width="43%" bgcolor="#C0C0C0">All domain + specific headers, all "expert-user" non-entry + point headers.</td> + <td valign="top" width="7%"> </td> + </tr> + <tr> + <td valign="top" width="6%"> </td> + <td valign="top" width="44%" bgcolor="#C0C0C0">Boost-root/boost/library-name/detail/</td> + <td valign="top" width="43%" bgcolor="#C0C0C0">All + implementation private headers.</td> + <td valign="top" width="7%"> </td> + </tr> + <tr> + <td valign="top" width="6%"> </td> + <td valign="top" width="44%" bgcolor="#C0C0C0">Boost-root/src/library-name/</td> + <td valign="top" width="43%" bgcolor="#C0C0C0">All + mandatory source files.</td> + <td valign="top" width="7%"> </td> + </tr> + <tr> + <td valign="top" width="6%"> </td> + <td valign="top" width="44%" bgcolor="#C0C0C0">Boost-root/src/library-name/config/</td> + <td valign="top" width="43%" bgcolor="#C0C0C0">Any + private configuration code (for example autoconf scripts), + if these grow then we could move to an integrated + configure system in Boost-root/config/ but that isn't + currently necessary.</td> + <td valign="top" width="7%"> </td> + </tr> + <tr> + <td valign="top" width="6%"> </td> + <td valign="top" width="44%" bgcolor="#C0C0C0">Boost-root/src/library-name/build/</td> + <td valign="top" width="43%" bgcolor="#C0C0C0">Temporary + location for private build systems, until the boost-wide + integrated build comes on line.</td> + <td valign="top" width="7%"> </td> + </tr> + <tr> + <td valign="top" width="6%"> </td> + <td valign="top" width="44%" bgcolor="#C0C0C0">Boost-root/docs/</td> + <td valign="top" width="43%" bgcolor="#C0C0C0">All common + documentation.</td> + <td valign="top" width="7%"> </td> + </tr> + <tr> + <td valign="top" width="6%"> </td> + <td valign="top" width="44%" bgcolor="#C0C0C0">Boost-root/docs/library-name/</td> + <td valign="top" width="43%" bgcolor="#C0C0C0">All + documentation for "library-name"; must include + an index.htm file.</td> + <td valign="top" width="7%"> </td> + </tr> + <tr> + <td> </td> + <td valign="top" bgcolor="#C0C0C0">Boost-root/licence</td> + <td bgcolor="#C0C0C0">A "generic" boost licence + that describes the minimal guarantees made by all boost + libraries (free for commercial use etc), with sub-directories + for those boost libraries that have their own licences (currently + just regex and graph, but this number is likely to grow).</td> + <td> </td> + </tr> + <tr> + <td valign="top" width="6%"> </td> + <td valign="top" width="44%" bgcolor="#C0C0C0">Boost-root/tests/library-name/</td> + <td valign="top" width="43%" bgcolor="#C0C0C0">All test + programs for "library-name". These may be + either: a single (multi-file) test program, multiple + single file test programs, or multiple sub-directories (one + for each test program).</td> + <td valign="top" width="7%"> </td> + </tr> + <tr> + <td valign="top" width="6%"> </td> + <td valign="top" width="44%" bgcolor="#C0C0C0">Boost-root/examples/library-name/</td> + <td valign="top" width="43%" bgcolor="#C0C0C0">All + example programs for "library-name". These may + be either: a single (multi-file) example program, + multiple single file example programs, or multiple sub-directories + (one for each example program).</td> + <td valign="top" width="7%"> </td> + </tr> + <tr> + <td valign="top" width="6%"> </td> + <td valign="top" width="44%" bgcolor="#C0C0C0">Boost-root/tools/tool-name/</td> + <td valign="top" width="43%" bgcolor="#C0C0C0">Contains + all files required to build and use the specified tool (makefile + generators etc).</td> + <td valign="top" width="7%"> </td> + </tr> + <tr> + <td valign="top" width="6%"> </td> + <td valign="top" width="44%" bgcolor="#C0C0C0">Boost-root/build/</td> + <td valign="top" width="43%" bgcolor="#C0C0C0">The boost + build system. Consists of a collection of makefiles (one + for each supported compiler), plus subdirectories: libs/ + for built libraries, bin/ for built dll's (win32 only) + and obj/ for object files.</td> + <td valign="top" width="7%"> </td> + </tr> +</table> + +<p> </p> + +<p>There are a couple of myths surrounding this structure that +need exploding:</p> + +<h4>It is hard to check in new libraries to the cvs repository</h4> + +<p>Not true: if the submission arrives as a zip file containing +the directory structure described above, then the command:</p> + +<p><code>cvs import boost library-name library-name-sub</code></p> + +<p>will import the whole of the <i>current</i> directory tree and +"intermingle" it with the existing boost tree in the +repository.</p> + +<p>There is one caveat to this however: if the imported source +contains some files that were already in the boost directory tree +(probably not a common situation), then an additional merge and +resolve conflicts step arises:</p> + +<p>On the main branch working copy:</p> + +<p><code>cvs checkout -jlibrary-name-sub boost</code></p> + +<p>Resolve any conflicts, and then:</p> + +<p><code>cvs commit</code></p> + +<p>The latter two steps should not be necessary in most cases, +and occur whatever directory structure is used (it is probably +easier in most cases to resolve such conflicts manually before +importing the new sources).</p> + +<h4>It is hard to checkout or to commit individual boost +libraries.</h4> + +<p>By using cvs aliases (defined in the modules file) this +situation does not arise, just specify the module/alias name when +performing a checkout/commit.</p> + +<h2 align="center">Migrating to the new structure</h2> + +<p>This is probably the hardest and most painful part of the +whole process. I'm going to suggest a migration method as follows:</p> + +<ol> + <li>Instigate a moratorium on cvs commits.</li> + <li>Copy the files to the new structure and commit the + changes, leaving the boost-root/libs/ directory in place + for now.</li> + <li>Fix html links, and documentation descriptions of file + locations.</li> + <li>Fix any library specific scripts/makefiles.</li> + <li>Publish the new structure (as a zip-file beta + distribution) and ask boost users/authors to check that + everything looks OK.</li> + <li>Delete the boost-root/libs/ directory (actually this is + quite hard, as cvs has no method for removing whole + directory trees).</li> + <li>Lift the moratorium on changes.</li> + <li>Publish the next boost revision with the new structure.</li> +</ol> + +<p>The whole process described above is quite likely to take 1-2 +weeks, during which no changes can be committed; this is going to +require a fair amount of co-ordination between developers (actually +this applies to any major change to the directory structure, +irrespective of what the change is).</p> + +<p>You will note that I haven't mentioned a time scale for the +associated tools that I have suggested, probably these will need +to be developed after the directory structure changes - although +I believe it is possible to develop a minimal subset (the library +description and alias generator) before making the changes if +that is required.</p> + +<p> </p> + +<p>There were a couple of other directory structures that were +evaluated while preparing this document:</p> + +<p><i>The "half way house structure":</i></p> + +<p>This is the same as the current structure, but moves mandatory +source files to boost-root/src/libname. This is easier to migrate +to from the current structure, but was felt to be neither one +thing nor the other.</p> + +<p><i>The "skinny root structure":</i></p> + +<p>This was proposed by John David, and Lois Goldthwaite, and +moves the contents of the current boost-root/libs/ directory into +boost-root/boost/. My main objection to this proposal is that it +is less "discoverable" than the one presented here - my +immediate reaction was "where has everything gone" - I +also dislike mixing headers and non-headers in the same tree. +However I'm prepared to accept that this could just be due to +personal bias.</p> + +<h2 align="center">Acknowledgements</h2> + +<p>The following people have had their ideas reused, +reconstituted and reformulated :-)</p> + +<p>Beman Dawes, Ed Brey, Walter E. Brown, John (EBo) David, Jeff +Garland, Lois Goldthwaite, Jens Maurer, Jeff Squyres, Gary Powell +and Daryle Walker.</p> + +<p> </p> + +<p> </p> + +<p> </p> +</body> +</html> diff --git a/index.htm b/index.htm new file mode 100644 index 0000000000..28b0c613c2 --- /dev/null +++ b/index.htm @@ -0,0 +1,189 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Boost C++ Libraries</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people/people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>Welcome to Boost.org!</h1> +<p>The Boost web site provides free, peer-reviewed, C++ <a href="libs/libraries.htm">libraries</a>. +The emphasis is on portable libraries which work well with the C++ Standard +Library.</p> +<p><a href="more/lib_guide.htm">Library Requirements and Guidelines</a> and <a href="more/submission_process.htm">Library +Submission Process</a> provides basic information for library authors.</p> +<p>If you are interested in who writes the libraries and maintains the web site, +check out <a href="people/people.htm">people</a>.</p> +<p>The <a href="more/faq.htm">FAQ</a> answers questions we hope someone will +bother to ask.</p> +<p>You may <a href="boost_all.zip">download all of boost</a> as a single ZIP +file. Click here for <a href="libs/libraries.htm#Download">download</a> +details. The source code is also publicly accessible in a CVS <a href="http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/?cvsroot=boost">repository</a>.</p> +<p>See <a href="libs/compiler_status.htm">Compiler Status</a> to find out what +library works with which compiler.</p> +<h2><a name="Mailing List">Membership</a></h2> +<p>If you are interested in Boost.org, please join our mailing list for +discussions of both technical and site-related issues, and to participate in +library reviews. Discussions can be received via email in summary or in full, or +viewed online via a web browser. We use the <a href="http://www.egroups.com">eGroups</a> +list hosting service. Subscribe or unsubscribe by sending email to <a href="mailto:boost-subscribe@egroups.com">boost-subscribe@egroups.com</a> +or <a href="mailto:boost-unsubscribe@egroups.com">boost-unsubscribe@egroups.com</a> +respectively, or go to the eGroups <a href="http://www.egroups.com/list/boost">list +manager home page</a>. Dave Abrahams and Beman Dawes are the list +moderators.</p> +<p>For mailing list members only, preliminary libraries under discussion are +available from the eGroups <a href="http://www.egroups.com/files/boost/">Files +section</a> (formerly called the "vault").</p> +<p>Beman Dawes is the Boost <a name="webmaster">webmaster</a>; email him at <a href="mailto:beman@boost.org">beman@boost.org</a> +with any concerns you don't want to just post to the mailing list.</p> +<h2>Latest News</h2> +<p>January 10, 2001 - Version 1.20.1</p> +<ul> + <li><a href="boost/compressed_pair.hpp">compressed_pair.hpp</a> minor update + fixes test failures of other libraries under VC++.</li> + <li><a href="libs/graph/doc/table_of_contents.html">Graph Library</a> minor + updates.</li> + <li> <a href="libs/regex/index.htm">Regular Expression Library</a> minor + updates.</li> + <li> Minor website fixes including missing files in boost_all.zip.</li> +</ul> +<p>January 6, 2001 - Version 1.20.0</p> +<ul> + <li><a href="libs/conversion/index.htm">Conversion Library</a> added - <a href="libs/conversion/cast.htm">cast</a> + and <a href="libs/conversion/lexical_cast.htm">lexical_cast</a> headers from + Dave Abrahams and Kevlin Henney.</li> + <li>Web site moved to a larger host after the old ISP collapsed + unexpectedly.</li> + <li>Regression tests now include execution testing. See <a href="libs/compiler_status.htm">Compiler Status</a>.</li> + <li><a href="more/discussion_policy.htm">Discussion Policy</a> page added.</li> + <li><a href="libs/array/index.htm">Array Library</a> minor documentation improvements.</li> + <li><a href="libs/graph/doc/table_of_contents.html">Graph Library</a> minor + updates.</li> + <li> <a href="libs/regex/index.htm">Regular Expression Library</a> minor + updates.</li> +</ul> +<p>December 10, 2000 - Version 1.19.0</p> +<ul> + <li><a href="libs/concept_check/concept_check.htm">Concept Check Library</a> + added - tools for generic programming from Jeremy Siek. </li> + <li><a href="libs/python/doc/index.html">Python Library</a> added - + reflects C++ classes and functions into Python, from Dave + Abrahams.</li> + <li><a href="libs/static_assert/static_assert.htm">Static Assert Library</a> + added - compile time assertions from John Maddock</li> + <li><a href="libs/property_map/property_map.html">Property Map Concepts</a> + added - interfaces which map key objects to value objects from Jeremy Siek.</li> + <li><a href="libs/graph/doc/table_of_contents.html">Graph Library</a> minor + updates.</li> + <li> <a href="libs/regex/index.htm">Regular Expression Library</a> minor + updates.</li> + <li><a href="more/lib_guide.htm">Library Requirements and Guidelines</a> - + directory name policy added.</li> + <li><a href="more/faq.htm">FAQ</a> updated.</li> +</ul> +<p>November 18, 2000 - Version 1.18.3</p> +<ul> + <li><a href="libs/graph/doc/table_of_contents.html">Graph Library</a> minor + fixes and additions.</li> + <li> <a href="libs/regex/index.htm">Regular Expression Library</a> minor fixes.</li> + <li> <a href="boost/cast.hpp">cast.hpp</a> Borland compiler fixes.</li> + <li><a href="boost/cstdint.hpp">cstdint.hpp</a> changed to no longer expose + names to the global namespace.</li> + <li><a href="libs/cs-beos.html">BeOS5/Intel</a> compiler status contributed by + John Maddock.</li> + <li> <a href="libs/compiler_status.htm">Compiler Status</a> added two additional test programs + .</li> +</ul> +<p>November 3, 2000 - Version 1.18.2</p> +<ul> + <li><a href="libs/conversion/cast.htm">Cast Library</a> Fix numeric_cast<> bugs with floating types.</li> + <li><a href="libs/graph/doc/table_of_contents.html">Graph Library</a> minor + fixes.</li> + <li> <a href="libs/regex/index.htm">Regular Expression Library</a> minor fixes.</li> + <li><a href="libs/config/index.htm">Configuration Header</a> more fixes for + broken compilers.</li> + <li><a href="libs/hdr_depend.html">Boost Header Dependencies</a> page added.</li> + <li>Terminology change: Several headers previously lumped together as a + "utility" library are now considered separate libraries. For + historical reasons, their non-header files still live in the + "utility" sub-directory.</li> +</ul> +<p>October 15, 2000 - Version 1.18.1</p> +<ul> + <li><a href="libs/graph/doc/table_of_contents.html">Graph Library</a>, <a href="libs/random/index.html">Random + Number Library</a>, and <a href="libs/regex/index.htm">Regular Expression Library</a>: + Minor fixes.</li> + <li><a href="libs/config/index.htm">Configuration Header</a> additions for + various compiler foibles.</li> + <li><a href="more/borland_cpp.html">Portability Hints: + Borland C++ 5.5.1</a> from Jens Maurer added.</li> + <li><a href="libs/compiler_status.htm">Compiler Status</a> updated for latest + versions of several compilers.</li> +</ul> +<p>September 28, 2000 - Version 1.18.0</p> +<ul> + <li>Preliminary release of two important new libraries:</li> +</ul> +<blockquote> + <ul> + <li><a href="libs/graph/doc/table_of_contents.html">Graph Library</a> - + Generic graph components and algorithms from Jeremy Siek and a University + of Notre Dame team.</li> + <li><a href="libs/regex/index.htm">Regular Expression Library</a> - Text + pattern matching in all its glory from John Maddock. </li> + </ul> +</blockquote> +<ul> + <li>Other changes: +</ul> +<blockquote> + <ul> + <li><a href="libs/array/index.htm">Array Library</a> improvements reflecting + formal review comments.</li> + <li><a href="boost/functional.hpp">functional.hpp</a> compiler workarounds + added.</li> + <li> <a href="libs/utility/tie.html">tie() function + template</a> added to utility.hpp for easier handling of std::pair<> + return values.</li> + <li><a href="libs/integer/index.htm">Integer Library</a> improved handling + of 64-bit integers.</li> + <li>Minor web site page updates.</li> + </ul> +</blockquote> +<p>August 3, 2000 - Version 1.17.0</p> +<ul> + <li><a href="libs/array/index.htm">Array Library</a> added - An STL compliant + container wrapper for arrays of constant size from Nicolai Josuttis.</li> + <li><a href="libs/array_traits/index.html">array traits</a> header renamed + array_traits.hpp (was array.hpp).</li> + <li><a href="libs/random/index.html">Random Number Library</a>: more minor + changes to support more compilers.</li> + <li><a href="libs/smart_ptr/index.htm">Smart Pointer Library</a>: performance + reducing exception-specifications removed.</li> + <li>Compiler and test + program fixes for call_traits, compressed_pair, and type_traits.</li> + <li>Updated <a href="boost/cast.hpp">cast.hpp</a> + to clear compiler warning messages..</li> + <li>Linux <a href="libs/compiler_status.htm">Compiler Status</a> added.</li> + <li>Boost source code now lives in a publicly accessible Concurrent Versions + System (CVS) <a href="http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/?cvsroot=boost">repository</a>.</li> +</ul> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B %Y" startspan -->10 January 2001<!--webbot bot="Timestamp" endspan i-checksum="32165" --></p> + +</body> + +</html> diff --git a/libs/array b/libs/array new file mode 160000 +Subproject d8163dee74d6d2e99956a6f1b23cbaa6cc0e1ec diff --git a/libs/compiler.cfg b/libs/compiler.cfg new file mode 100644 index 0000000000..6e9eb2a664 --- /dev/null +++ b/libs/compiler.cfg @@ -0,0 +1,118 @@ +// Boost compiler configuration file +// +// The first command template is for compile only tests +// The second command template is for compile and link (and possibly run) tests + +linux +gcc +GCC 2.95.2 +g++ -c -ftemplate-depth-30 -I%include %source +g++ -o boosttmp.exe -ftemplate-depth-30 -I%include %source +GNU<br>GCC<br>2.95.2 + +linux +gcc-stlport +GCC 2.95.2 STLport 4.0 +g++ -c -V 2.95.2-stlport -ftemplate-depth-30 -I%include %source +g++ -o boosttmp.exe -V 2.95.2-stlport -ftemplate-depth-30 -I%include %source +GNU<br>GCC<br>2.95.2<br>STLport<br>4.0 + +linux +como +Comeau C++ 4.2.44 beta3 +como -c -I%include %source +como -o boosttmp.exe -I%include %source +Comeau C++<br>4.2.44 beta3<br>STLport<br>4.0 + +sunos5 +suncc +Sun WorkShop 6 2000/04/07 C++ 5.1 +CC -c -I%include %source +CC -o boosttmp.exe -I%include %source +Sun C++<br>Sun WorkShop 6, C++ 5.1 + +sunos5 +gcc +GCC 2.95.2 +g++ -c -Wall -pedantic -ftemplate-depth-30 -Wno-long-long -I%include %source +g++ -o boosttmp.exe -Wall -pedantic -ftemplate-depth-30 -Wno-long-long -I%include %source +GNU<br>GCC<br>2.95.2 + +sunos5 +kcc +KCC 3.4g +KCC -c --strict_warnings -I%include %source +KCC -o boosttmp.exe --strict_warnings -I%include %source +KAI<br>KCC<br>3.4g + +tru64 +cxx +Compaq C++ 6.0 +cxx -c -std strict_ansi -D__USE_STD_IOSTREAM -I%include %source +cxx -o boosttmp.exe -std strict_ansi -D__USE_STD_IOSTREAM -I%include %source +Compaq C++<br>6.2-024 + +tru64 +cxx-clib +Compaq C++ 6.0 with <cXXX> headers +cxx -c -std strict_ansi -D__USE_STD_IOSTREAM -I$HOME/include -I%include %source +cxx -o boosttmp.exe -std strict_ansi -D__USE_STD_IOSTREAM -I$HOME/include -I%include %source +Compaq C++<br>6.2-024<br>clib + +irix +irixcc +IRIX CC 7.1.3.3 +CC -c -LANG:std -I%include %source +CC -o boosttmp.exe -LANG:std -I%include %source +SGI IRIX CC<br>7.3.1.1m + +irix +irixcc-clib +IRIX CC 7.1.3.3 with <cXXX> headers +CC -c -LANG:std -I$HOME/include -I%include %source +CC -o boosttmp.exe -LANG:std -I$HOME/include -I%include %source +SGI IRIX CC<br>7.3.1.1m<br>clib + +beos +gcc +GNU GCC +c++ -c -ftemplate-depth-30 -Wall -I%include %source +c++ -o boosttmp.exe -ftemplate-depth-30 -Wall -I%include %source +GNUPro<br>GCC 2.9 + +beos +gcc-stlport +GNU GCC +c++ -c -ftemplate-depth-30 -Wall -I/boot/home/config/stlport/stl330 -I%include %source +c++ -o boosttmp.exe -ftemplate-depth-30 -Wall -I/boot/home/config/stlport/stl330 -I%include %source +GNUPro<br>GCC 2.9<br>+<br>SGI STL 3.3 + +win32 +bcc +Borland C++ 5.5.1 +bcc32 -c -I%include -j10 -q %source +bcc32 -eboosttmp.exe -I%include -j10 -q %source +Borland<br>BCC<br>5.5.1 + +win32 +cw +Metrowerks CodeWarrior +mwcc -c -nocodegen -maxerrors 10 -cwd source -I- -I%include %source +mwcc -o boosttmp.exe -maxerrors 10 -cwd source -I- -I%include %source +Metrowerks<br>CodeWarrior<br>6.0 + +win32 +vc +Microsoft Visual C++ +cl /c /nologo /Zm400 /MDd /W3 /GR /GX /Zi /Od /GZ /I "%include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_CONSOLE" %source +cl /Feboosttmp.exe /nologo /Zm400 /MDd /W3 /GR /GX /Zi /Od /GZ /I "%include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_CONSOLE" %source /link user32.lib +Microsoft<br>VC++<br>6.0 SP4 + +win32 +vc-stlport +Microsoft Visual C++ with STLport +cl /c /nologo /Zm400 /MDd /W3 /GR /GX /Zi /Od /GZ /I "$BOOST_STLPORT_PATH/stlport" /I "%include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_CONSOLE" %source +cl /Feboosttmp.exe /nologo /Zm400 /MDd /W3 /GR /GX /Zi /Od /GZ /I "$BOOST_STLPORT_PATH/stlport" /I "%include" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_CONSOLE" %source /link /libpath:$BOOST_STLPORT_PATH\lib user32.lib +Microsoft<br>VC++<br>6.0 SP4<br>STLport<br>4.0 + +// end of file diff --git a/libs/compiler_status.htm b/libs/compiler_status.htm new file mode 100644 index 0000000000..0124d88cf0 --- /dev/null +++ b/libs/compiler_status.htm @@ -0,0 +1,92 @@ +<html> + +<head> +<meta http-equiv="Content-Type" +content="text/html; charset=iso-8859-1"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<title>Compiler Status Report</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" cellpadding="2" bgcolor="#007F7F"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" + alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font color="#FFFFFF" size="4" + face="Arial">Home</font></a></td> + <td><a href="libraries.htm"><font color="#FFFFFF" + size="4" face="Arial">Libraries</font></a></td> + <td><a href="../people/people.htm"><font color="#FFFFFF" + size="4" face="Arial">People</font></a></td> + <td><a href="../more/faq.htm"><font color="#FFFFFF" + size="4" face="Arial">FAQ</font></a></td> + <td><a href="../more/index.htm"><font color="#FFFFFF" + size="4" face="Arial">More</font></a></td> + </tr> +</table> + +<h1>Compiler Status</h1> + +<p>Will all boost libraries work with your compiler? +Unfortunately, the answer is "it depends.".</p> + +<p>Boost libraries rely on modern C++ features such as templates +and the C++ Standard Library. Most modern compilers support those major +features fairly well. But even today, years after +the adoption of the C++ Standard, some compilers still don't +support important minor features like partial template specialization.</p> + +<p>Boost library authors often expend a great deal of effort +trying to work around compiler deficiencies. Nevertheless, +some libraries will not compile at all with certain compilers or +may have crippled functionality. Even if the current +release of a compiler supports a boost library, older version of +the compiler may not work properly.</p> + +<h2>Compiler Status Tables</h2> + +<ul> + <li><a href="cs-linux.html">Linux/x86</a> Contributed by + Jens Maurer</li> + <li><a href="cs-beos.html">BeOS5/Intel</a> Contributed by + John Maddock.</li> + <li><a href="cs-win32.html">Windows NT / Windows 2000</a> + Contributed by Beman Dawes</li> + <li><a href="cs-tru64.html">Compaq Tru64 Unix</a> + Contributed by Jens Maurer in co-operation with Ralf W. + Grosse-Kunstleve + <li><a href="cs-irix.html">SGI IRIX 6.5</a> + Contributed by Jens Maurer in co-operation with Ralf W. + Grosse-Kunstleve +</ul> + +<p>Boost releases are run through a regression test which +automatically generates the above tables. Unless otherwise +indicated, the C++ Standard Library implementation is the one +shipped with the compiler.</p> + +<p>The <a href="regression.cpp">regression.cpp</a> test program was contributed +by Jens Maurer, generalizing and improving an earlier program by Beman Dawes. +The <a href="compiler.cfg">compiler.cfg</a> and <a href="regression.cfg">regression.cfg +</a>configuration files control the test.</p> + +<p><b>Warning:</b> These tables are not a good indication of a +particular compiler's compliance with the C++ Standard. The +boost libraries often contain workarounds which mask compiler +deficiencies.</p> + +<p><b>Warning: </b>Some regression tests are compile +only tests, or compile-and-link tests; the programs are not executed or otherwise tested. See +the "Test Type" column in the tables. Even the compilation results may be spurious; many negative +results stem from problems with the immature test suite rather +that with the library or compiler. Furthermore, some +library tests have not yet been included.</p> + +<hr> + +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" +s-format="%d %B %Y" startspan -->08 January 2001<!--webbot bot="Timestamp" endspan i-checksum="32180" --></p> +</body> +</html> diff --git a/libs/compose b/libs/compose new file mode 160000 +Subproject e58feb17ee6f7a8f5b3ec772a6c9945c5609a47 diff --git a/libs/concept_check b/libs/concept_check new file mode 160000 +Subproject 1dce1ae08783f40515aa366e7d4e015f8662e5d diff --git a/libs/config b/libs/config new file mode 160000 +Subproject 69a8828e2a8bb62a6007669b37f9eef16ab77ca diff --git a/libs/conversion b/libs/conversion new file mode 160000 +Subproject c622558246a895bc8a60cbe646a06b2d4a175ac diff --git a/libs/cs-beos.html b/libs/cs-beos.html new file mode 100644 index 0000000000..5aed6f5689 --- /dev/null +++ b/libs/cs-beos.html @@ -0,0 +1,224 @@ +<html> +<head> +<title> +Compiler Status: beos +</title> +</head> +<body bgcolor="#ffffff" text="#000000"> +<h1><img border border="0" src="../c++boost.gif" width="277" height="86"></h1> +<h1>Compiler Status: beos</h1> +</p> +<p><b>Run Date:</b> 02 Jan 2001 13:10 GMT</p> +<p> +<table border="1" cellspacing="0" cellpadding="5"> +<tr> +<td>Program</td> +<td>Test<br>Type</td> +<td>GNUPro GCC 2.9</td> +<td>GNUPro GCC 2.9<br>+<br>SGI STL 3.30</td> +</tr> +<tr> +<td><a href="libs/config/config_test.cpp">libs/config/config_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/array/array1.cpp">libs/array/array1.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="libs/concept_check/concept_check_test.cpp">libs/concept_check/concept_check_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/concept_check/class_concept_check_test.cpp">libs/concept_check/class_concept_check_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/concept_check/concept_check_fail_expected.cpp">libs/concept_check/concept_check_fail_expected.cpp</a></td> +<td>link-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/concept_check/class_concept_fail_expected.cpp">libs/concept_check/class_concept_fail_expected.cpp</a></td> +<td>link-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/functional/function_test.cpp">libs/functional/function_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/graph/test/graph.cpp">libs/graph/test/graph.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="libs/integer/cstdint_test.cpp">libs/integer/cstdint_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/integer/integer_test.cpp">libs/integer/integer_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/integer/integer_traits_test.cpp">libs/integer/integer_traits_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="libs/rational/rational_example.cpp">libs/rational/rational_example.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="libs/random/random_test.cpp">libs/random/random_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="libs/random/random_demo.cpp">libs/random/random_demo.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="libs/regex/demo/regress/regex_test.cpp">libs/regex/demo/regress/regex_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/regex/demo/regress/wregex_test.cpp">libs/regex/demo/regress/wregex_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="libs/smart_ptr/smart_ptr_test.cpp">libs/smart_ptr/smart_ptr_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/static_assert/static_assert_test.cpp">libs/static_assert/static_assert_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/static_assert/static_assert_test_fail_1.cpp">libs/static_assert/static_assert_test_fail_1.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/static_assert/static_assert_test_fail_2.cpp">libs/static_assert/static_assert_test_fail_2.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/static_assert/static_assert_test_fail_3.cpp">libs/static_assert/static_assert_test_fail_3.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/static_assert/static_assert_test_fail_4.cpp">libs/static_assert/static_assert_test_fail_4.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/static_assert/static_assert_test_fail_5.cpp">libs/static_assert/static_assert_test_fail_5.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/static_assert/static_assert_test_fail_6.cpp">libs/static_assert/static_assert_test_fail_6.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/static_assert/static_assert_test_fail_7.cpp">libs/static_assert/static_assert_test_fail_7.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/static_assert/static_assert_test_fail_8.cpp">libs/static_assert/static_assert_test_fail_8.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/utility/call_traits_test.cpp">libs/utility/call_traits_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/utility/cast_test.cpp">libs/utility/cast_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/utility/compressed_pair_test.cpp">libs/utility/compressed_pair_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/utility/iterator_adaptor_test.cpp">libs/utility/iterator_adaptor_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/utility/iterators_test.cpp">libs/utility/iterators_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="libs/utility/operators_test.cpp">libs/utility/operators_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="libs/utility/tie_example.cpp">libs/utility/tie_example.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="libs/utility/type_traits_test.cpp">libs/utility/type_traits_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +</tr> +</table> diff --git a/libs/cs-irix.html b/libs/cs-irix.html new file mode 100644 index 0000000000..318a0784fe --- /dev/null +++ b/libs/cs-irix.html @@ -0,0 +1,237 @@ +<html> +<head> +<title> +Compiler Status: irix +</title> +</head> +<body bgcolor="#ffffff" text="#000000"> +<h1><img border border="0" src="../c++boost.gif" width="277" height="86"></h1> +<h1>Compiler Status: irix</h1> + +<p><b>Run Date:</b> 07 Jan 2001 20:56 GMT</p> +<p><b>System Configuration:</b> IRIX 6.5</p> +<p> +<table border="1" cellspacing="0" cellpadding="5"> +<tr> +<td>Program</td> +<td>Test<br>Type</td> +<td>SGI IRIX CC<br>7.3.1.1m</td> +<td>SGI IRIX CC<br>7.3.1.1m<br>clib</td> +</tr> +<tr> +<td><a href="../libs/config/config_test.cpp">libs/config/config_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/array/array1.cpp">libs/array/array1.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/concept_check/concept_check_test.cpp">libs/concept_check/concept_check_test.cpp</a></td> +<td>compile</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/concept_check/class_concept_check_test.cpp">libs/concept_check/class_concept_check_test.cpp</a></td> +<td>compile</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/concept_check/concept_check_fail_expected.cpp">libs/concept_check/concept_check_fail_expected.cpp</a></td> +<td>link-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/concept_check/class_concept_fail_expected.cpp">libs/concept_check/class_concept_fail_expected.cpp</a></td> +<td>link-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/conversion/cast_test.cpp">libs/conversion/cast_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/conversion/lexical_cast_test.cpp">libs/conversion/lexical_cast_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/functional/function_test.cpp">libs/functional/function_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/graph/test/graph.cpp">libs/graph/test/graph.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/integer/cstdint_test.cpp">libs/integer/cstdint_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/integer/integer_test.cpp">libs/integer/integer_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/integer/integer_traits_test.cpp">libs/integer/integer_traits_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/rational/rational_example.cpp">libs/rational/rational_example.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/random/random_test.cpp">libs/random/random_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/random/random_demo.cpp">libs/random/random_demo.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/regex/demo/regress/regex_test.cpp">libs/regex/demo/regress/regex_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/regex/demo/regress/wregex_test.cpp">libs/regex/demo/regress/wregex_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/smart_ptr/smart_ptr_test.cpp">libs/smart_ptr/smart_ptr_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test.cpp">libs/static_assert/static_assert_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_1.cpp">libs/static_assert/static_assert_test_fail_1.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_2.cpp">libs/static_assert/static_assert_test_fail_2.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_3.cpp">libs/static_assert/static_assert_test_fail_3.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_4.cpp">libs/static_assert/static_assert_test_fail_4.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_5.cpp">libs/static_assert/static_assert_test_fail_5.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_6.cpp">libs/static_assert/static_assert_test_fail_6.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_7.cpp">libs/static_assert/static_assert_test_fail_7.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_8.cpp">libs/static_assert/static_assert_test_fail_8.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/utility/call_traits_test.cpp">libs/utility/call_traits_test.cpp</a></td> +<td>compile</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/compressed_pair_test.cpp">libs/utility/compressed_pair_test.cpp</a></td> +<td>compile</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/iterator_adaptor_test.cpp">libs/utility/iterator_adaptor_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/utility/iterators_test.cpp">libs/utility/iterators_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/utility/operators_test.cpp">libs/utility/operators_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/utility/tie_example.cpp">libs/utility/tie_example.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/type_traits_test.cpp">libs/utility/type_traits_test.cpp</a></td> +<td>compile</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +</table></p> +<p> +Note: For the 'clib' configuration, the missing new-style C +library headers <cXXX> have been supplied. +</p> +</body> +</html> diff --git a/libs/cs-linux.html b/libs/cs-linux.html new file mode 100644 index 0000000000..ad18398df3 --- /dev/null +++ b/libs/cs-linux.html @@ -0,0 +1,274 @@ +<html> +<head> +<title> +Compiler Status: linux +</title> +</head> +<body bgcolor="#ffffff" text="#000000"> +<h1><img border border="0" src="../c++boost.gif" width="277" height="86"></h1> +<h1>Compiler Status: linux</h1> + +<p><b>Run Date:</b> 09 Jan 2001 18:36 GMT</p> +<p><b>System Configuration:</b> Linux 2.2.13 (CPU: i686)</p> +<p> +<table border="1" cellspacing="0" cellpadding="5"> +<tr> +<td>Program</td> +<td>Test<br>Type</td> +<td>GNU<br>GCC<br>2.95.2</td> +<td>GNU<br>GCC<br>2.95.2<br>STLport<br>4.0</td> +<td>Comeau C++<br>4.2.44 beta3<br>STLport<br>4.0</td> +</tr> +<tr> +<td><a href="../libs/config/config_test.cpp">libs/config/config_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/array/array1.cpp">libs/array/array1.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/concept_check/concept_check_test.cpp">libs/concept_check/concept_check_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/concept_check/class_concept_check_test.cpp">libs/concept_check/class_concept_check_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/concept_check/concept_check_fail_expected.cpp">libs/concept_check/concept_check_fail_expected.cpp</a></td> +<td>link-fail</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/concept_check/class_concept_fail_expected.cpp">libs/concept_check/class_concept_fail_expected.cpp</a></td> +<td>link-fail</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/conversion/cast_test.cpp">libs/conversion/cast_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/conversion/lexical_cast_test.cpp">libs/conversion/lexical_cast_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/functional/function_test.cpp">libs/functional/function_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/graph/test/graph.cpp">libs/graph/test/graph.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/integer/cstdint_test.cpp">libs/integer/cstdint_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/integer/integer_test.cpp">libs/integer/integer_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/integer/integer_traits_test.cpp">libs/integer/integer_traits_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/rational/rational_example.cpp">libs/rational/rational_example.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/random/random_test.cpp">libs/random/random_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/random/random_demo.cpp">libs/random/random_demo.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/regex/demo/regress/regex_test.cpp">libs/regex/demo/regress/regex_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/regex/demo/regress/wregex_test.cpp">libs/regex/demo/regress/wregex_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/smart_ptr/smart_ptr_test.cpp">libs/smart_ptr/smart_ptr_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test.cpp">libs/static_assert/static_assert_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_1.cpp">libs/static_assert/static_assert_test_fail_1.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_2.cpp">libs/static_assert/static_assert_test_fail_2.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_3.cpp">libs/static_assert/static_assert_test_fail_3.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_4.cpp">libs/static_assert/static_assert_test_fail_4.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_5.cpp">libs/static_assert/static_assert_test_fail_5.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_6.cpp">libs/static_assert/static_assert_test_fail_6.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_7.cpp">libs/static_assert/static_assert_test_fail_7.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_8.cpp">libs/static_assert/static_assert_test_fail_8.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/utility/call_traits_test.cpp">libs/utility/call_traits_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/compressed_pair_test.cpp">libs/utility/compressed_pair_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/iterator_adaptor_test.cpp">libs/utility/iterator_adaptor_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/iterators_test.cpp">libs/utility/iterators_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/operators_test.cpp">libs/utility/operators_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/tie_example.cpp">libs/utility/tie_example.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/type_traits_test.cpp">libs/utility/type_traits_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +</table></p> +<p> +Notes: A hand-crafted <limits> Standard header has been +applied to all configurations. +The tests were run on a GNU libc 2.2 system which has improved +wide character support compared to previous versions.</p> +</body> +</html> diff --git a/libs/cs-tru64.html b/libs/cs-tru64.html new file mode 100644 index 0000000000..a73ebc9fa2 --- /dev/null +++ b/libs/cs-tru64.html @@ -0,0 +1,237 @@ +<html> +<head> +<title> +Compiler Status: tru64 +</title> +</head> +<body bgcolor="#ffffff" text="#000000"> +<h1><img border border="0" src="../c++boost.gif" width="277" height="86"></h1> +<h1>Compiler Status: tru64</h1> + +<p><b>Run Date:</b> 07 Jan 2001 21:21 GMT</p> +<p><b>System Configuration:</b> OSF1 V5.0</p> +<p> +<table border="1" cellspacing="0" cellpadding="5"> +<tr> +<td>Program</td> +<td>Test<br>Type</td> +<td>Compaq C++<br>6.2-024</td> +<td>Compaq C++<br>6.2-024<br>clib</td> +</tr> +<tr> +<td><a href="../libs/config/config_test.cpp">libs/config/config_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/array/array1.cpp">libs/array/array1.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/concept_check/concept_check_test.cpp">libs/concept_check/concept_check_test.cpp</a></td> +<td>compile</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/concept_check/class_concept_check_test.cpp">libs/concept_check/class_concept_check_test.cpp</a></td> +<td>compile</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/concept_check/concept_check_fail_expected.cpp">libs/concept_check/concept_check_fail_expected.cpp</a></td> +<td>link-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/concept_check/class_concept_fail_expected.cpp">libs/concept_check/class_concept_fail_expected.cpp</a></td> +<td>link-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/conversion/cast_test.cpp">libs/conversion/cast_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/conversion/lexical_cast_test.cpp">libs/conversion/lexical_cast_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/functional/function_test.cpp">libs/functional/function_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/graph/test/graph.cpp">libs/graph/test/graph.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/integer/cstdint_test.cpp">libs/integer/cstdint_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/integer/integer_test.cpp">libs/integer/integer_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/integer/integer_traits_test.cpp">libs/integer/integer_traits_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/rational/rational_example.cpp">libs/rational/rational_example.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/random/random_test.cpp">libs/random/random_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/random/random_demo.cpp">libs/random/random_demo.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/regex/demo/regress/regex_test.cpp">libs/regex/demo/regress/regex_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/regex/demo/regress/wregex_test.cpp">libs/regex/demo/regress/wregex_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/smart_ptr/smart_ptr_test.cpp">libs/smart_ptr/smart_ptr_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test.cpp">libs/static_assert/static_assert_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_1.cpp">libs/static_assert/static_assert_test_fail_1.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_2.cpp">libs/static_assert/static_assert_test_fail_2.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_3.cpp">libs/static_assert/static_assert_test_fail_3.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_4.cpp">libs/static_assert/static_assert_test_fail_4.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_5.cpp">libs/static_assert/static_assert_test_fail_5.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_6.cpp">libs/static_assert/static_assert_test_fail_6.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_7.cpp">libs/static_assert/static_assert_test_fail_7.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_8.cpp">libs/static_assert/static_assert_test_fail_8.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/call_traits_test.cpp">libs/utility/call_traits_test.cpp</a></td> +<td>compile</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/compressed_pair_test.cpp">libs/utility/compressed_pair_test.cpp</a></td> +<td>compile</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/iterator_adaptor_test.cpp">libs/utility/iterator_adaptor_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/utility/iterators_test.cpp">libs/utility/iterators_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/utility/operators_test.cpp">libs/utility/operators_test.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/utility/tie_example.cpp">libs/utility/tie_example.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/type_traits_test.cpp">libs/utility/type_traits_test.cpp</a></td> +<td>compile</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +</tr> +</table></p> +<p> +Note: For the 'clib' configuration, the missing new-style C +library headers <cXXX> have been supplied. +</p> +</body> +</html> diff --git a/libs/cs-win32.html b/libs/cs-win32.html new file mode 100644 index 0000000000..aa633ea449 --- /dev/null +++ b/libs/cs-win32.html @@ -0,0 +1,323 @@ +<html> +<head> +<title> +Compiler Status: win32 +</title> +</head> +<body bgcolor="#ffffff" text="#000000"> +<h1><img border border="0" src="../c++boost.gif" width="277" height="86"></h1> +<h1>Compiler Status: win32</h1> + +<p><b>Run Date:</b> 10 Jan 2001 18:05 GMT</p> +<p><b>System Configuration:</b> Microsoft Windows 32bit</p> +<p> +<table border="1" cellspacing="0" cellpadding="5"> +<tr> +<td>Program</td> +<td>Test<br>Type</td> +<td>Borland<br>BCC<br>5.5.1</td> +<td>Metrowerks<br>CodeWarrior<br>6.0</td> +<td>Microsoft<br>VC++<br>6.0 SP4</td> +<td>Microsoft<br>VC++<br>6.0 SP4<br>STLport<br>4.0</td> +</tr> +<tr> +<td><a href="../libs/config/config_test.cpp">libs/config/config_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/array/array1.cpp">libs/array/array1.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/concept_check/concept_check_test.cpp">libs/concept_check/concept_check_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/concept_check/class_concept_check_test.cpp">libs/concept_check/class_concept_check_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/concept_check/concept_check_fail_expected.cpp">libs/concept_check/concept_check_fail_expected.cpp</a></td> +<td>link-fail</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/concept_check/class_concept_fail_expected.cpp">libs/concept_check/class_concept_fail_expected.cpp</a></td> +<td>link-fail</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/conversion/cast_test.cpp">libs/conversion/cast_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/conversion/lexical_cast_test.cpp">libs/conversion/lexical_cast_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/functional/function_test.cpp">libs/functional/function_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/graph/test/graph.cpp">libs/graph/test/graph.cpp</a></td> +<td>run</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/integer/cstdint_test.cpp">libs/integer/cstdint_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/integer/integer_test.cpp">libs/integer/integer_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/integer/integer_traits_test.cpp">libs/integer/integer_traits_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/rational/rational_example.cpp">libs/rational/rational_example.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/random/random_test.cpp">libs/random/random_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/random/random_demo.cpp">libs/random/random_demo.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +</tr> +<tr> +<td><a href="../libs/regex/demo/regress/regex_test.cpp">libs/regex/demo/regress/regex_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/regex/demo/regress/wregex_test.cpp">libs/regex/demo/regress/wregex_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/smart_ptr/smart_ptr_test.cpp">libs/smart_ptr/smart_ptr_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test.cpp">libs/static_assert/static_assert_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_1.cpp">libs/static_assert/static_assert_test_fail_1.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_2.cpp">libs/static_assert/static_assert_test_fail_2.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_3.cpp">libs/static_assert/static_assert_test_fail_3.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_4.cpp">libs/static_assert/static_assert_test_fail_4.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_5.cpp">libs/static_assert/static_assert_test_fail_5.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_6.cpp">libs/static_assert/static_assert_test_fail_6.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_7.cpp">libs/static_assert/static_assert_test_fail_7.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/static_assert/static_assert_test_fail_8.cpp">libs/static_assert/static_assert_test_fail_8.cpp</a></td> +<td>compile-fail</td> +<td>Pass</td> +<td><font color="#FF0000">Fail</font></td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/timer/timer.cpp">libs/timer/timer.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/timer/timer_test.cpp">libs/timer/timer_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/call_traits_test.cpp">libs/utility/call_traits_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/compressed_pair_test.cpp">libs/utility/compressed_pair_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/iterator_adaptor_test.cpp">libs/utility/iterator_adaptor_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/iterators_test.cpp">libs/utility/iterators_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/operators_test.cpp">libs/utility/operators_test.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/tie_example.cpp">libs/utility/tie_example.cpp</a></td> +<td>run</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +<tr> +<td><a href="../libs/utility/type_traits_test.cpp">libs/utility/type_traits_test.cpp</a></td> +<td>compile</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +<td>Pass</td> +</tr> +</table></p> +<p> +</p> +</body> +</html> diff --git a/libs/detail b/libs/detail new file mode 160000 +Subproject 15f38e8168d61b3f59f315addd9e47755486f10 diff --git a/libs/disjoint_sets b/libs/disjoint_sets new file mode 160000 +Subproject fb8c4dc50bb5b02c162d55b58c4524149cc7cd7 diff --git a/libs/functional b/libs/functional new file mode 160000 +Subproject e351a79b1a648501f319f0105b3f8ce32db90e3 diff --git a/libs/graph b/libs/graph new file mode 160000 +Subproject 59458e444d156c6fe8236927156283987a6ac6a diff --git a/libs/hdr_depend.html b/libs/hdr_depend.html new file mode 100644 index 0000000000..b95d36c9e1 --- /dev/null +++ b/libs/hdr_depend.html @@ -0,0 +1,583 @@ +<html> +<head> +<title> +Boost Header Dependencies +</title> +</head><body bgcolor="#FFFFFF" text="#000000"> +<h1><img border="0" src="../c++boost.gif" width="277" height="86"></h1> +<h1>Boost Header Dependencies</h1> +<p>The program which generates this table simply scans for <i><b>#includes</b></i> +in source code. Thus it picks up spurious <i>#includes</i> such as those +in comments and string literals, and those excluded from compiles by +preprocessor statements. If a header appears to include some +unusual header, such as stdlib.h or windows.h, it is almost +certainly only actually included as a platform specific workaround.</p> +<p>Boost sub-directories with the word "detail" in their name contain +implementation details.</p> +<p>C++ Standard Library headers included by other Standard Library headers are +not shown since such dependencies are an artifact of a particular Standard +Library implementation and cannot be relied upon.</p> +<p>Which headers are included by a given boost header is also an implementation +detail and subject to change at any time. The Header Dependencies Table is +useful only for determining which headers are currently included by a given +boost header. Just as with the standard library, if your program uses components +from any boost header, that header should specifically be included.</p> +<p><b>Run Date:</b> 06 Jan 2001 14:01 GMT</p> +<p> +<table border="1" cellspacing="0" cellpadding="5"> +<tr> +<td><b>Header</b></td> +<td><b>Other headers included, directly or indirectly</b></td> +</tr> +<tr> +<td valign="top"><a href="../boost/array.hpp">boost/array.hpp</a></td> +<td>algorithm<br> +<a href="../boost/config.hpp">boost/config.hpp</a><br> + cstdlib<br> +cstddef<br> +iterator<br> +stdexcept </td> +</tr> +<tr> +<td valign="top"><a href="../boost/array_traits.hpp">boost/array_traits.hpp</a></td> +<td>cstddef </td> +</tr> +<tr> +<td valign="top"><a href="../boost/call_traits.hpp">boost/call_traits.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> + iterator<br> +<a href="../boost/detail/call_traits.hpp">boost/detail/call_traits.hpp</a><br> + <a href="../boost/type_traits.hpp">boost/type_traits.hpp</a><br> + <a href="../boost/detail/ob_type_traits.hpp">boost/detail/ob_type_traits.hpp</a><br> + <a href="../boost/detail/type_traits.hpp">boost/detail/type_traits.hpp</a><br> + climits<br> +<a href="../boost/detail/ob_call_traits.hpp">boost/detail/ob_call_traits.hpp</a> </td> +</tr> +<tr> +<td valign="top"><a href="../boost/cast.hpp">boost/cast.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> + iterator<br> +cassert<br> +limits<br> +typeinfo </td> +</tr> +<tr> +<td valign="top"><a href="../boost/compose.hpp">boost/compose.hpp</a></td> +<td>functional </td> +</tr> +<tr> +<td valign="top"><a href="../boost/compressed_pair.hpp">boost/compressed_pair.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> + iterator<br> +<a href="../boost/detail/compressed_pair.hpp">boost/detail/compressed_pair.hpp</a><br> + algorithm<br> + <a href="../boost/call_traits.hpp">boost/call_traits.hpp</a><br> + <a href="../boost/detail/call_traits.hpp">boost/detail/call_traits.hpp</a><br> + <a href="../boost/detail/ob_call_traits.hpp">boost/detail/ob_call_traits.hpp</a><br> + <a href="../boost/type_traits.hpp">boost/type_traits.hpp</a><br> + <a href="../boost/detail/ob_type_traits.hpp">boost/detail/ob_type_traits.hpp</a><br> + <a href="../boost/detail/type_traits.hpp">boost/detail/type_traits.hpp</a><br> + climits<br> +<a href="../boost/detail/ob_compressed_pair.hpp">boost/detail/ob_compressed_pair.hpp</a> </td> +</tr> +<tr> +<td valign="top"><a href="../boost/concept_archetype.hpp">boost/concept_archetype.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> + iterator<br> +<a href="../boost/iterator.hpp">boost/iterator.hpp</a><br> +functional </td> +</tr> +<tr> +<td valign="top"><a href="../boost/concept_check.hpp">boost/concept_check.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> + iterator<br> +<a href="../boost/iterator.hpp">boost/iterator.hpp</a><br> +<a href="../boost/pending/limits.hpp">boost/pending/limits.hpp</a><br> + float.h<br> + limits<br> + limits.h<br> +utility </td> +</tr> +<tr> +<td valign="top"><a href="../boost/config.hpp">boost/config.hpp</a></td> +<td>cstddef<br> +cstdlib<br> +iterator </td> +</tr> +<tr> +<td valign="top"><a href="../boost/cregex.hpp">boost/cregex.hpp</a></td> +<td><a href="../boost/re_detail/regex_config.hpp">boost/re_detail/regex_config.hpp</a><br> + algo.h<br> + algorithm<br> + <a href="../boost/re_detail/regex_library_include.hpp">boost/re_detail/regex_library_include.hpp</a><br> + <a href="../boost/re_detail/regex_options.hpp">boost/re_detail/regex_options.hpp</a><br> + <a href="../boost/smart_ptr.hpp">boost/smart_ptr.hpp</a><br> + <a href="../boost/config.hpp">boost/config.hpp</a><br> + <a href="../boost/utility.hpp">boost/utility.hpp</a><br> + functional<br> + cctype<br> + clocale<br> + cstddef<br> + cstdio<br> + cstdlib<br> + cstring<br> + cwchar<br> + cwctype<br> + exception<br> + iostream<br> + iostream.h<br> + iterator<br> + locale<br> + memory<br> + stdlib.h<br> + utility<br> + windows.h<br> +string<br> +vector </td> +</tr> +<tr> +<td valign="top"><a href="../boost/cstdint.hpp">boost/cstdint.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> + iterator<br> +limits.h<br> +stdint.h </td> +</tr> +<tr> +<td valign="top"><a href="../boost/functional.hpp">boost/functional.hpp</a></td> +<td><a href="../boost/call_traits.hpp">boost/call_traits.hpp</a><br> + <a href="../boost/detail/call_traits.hpp">boost/detail/call_traits.hpp</a><br> + <a href="../boost/type_traits.hpp">boost/type_traits.hpp</a><br> + <a href="../boost/detail/ob_type_traits.hpp">boost/detail/ob_type_traits.hpp</a><br> + <a href="../boost/detail/type_traits.hpp">boost/detail/type_traits.hpp</a><br> + climits<br> + cstddef<br> + <a href="../boost/detail/ob_call_traits.hpp">boost/detail/ob_call_traits.hpp</a><br> +<a href="../boost/config.hpp">boost/config.hpp</a><br> + cstdlib<br> + iterator<br> +functional </td> +</tr> +<tr> +<td valign="top"><a href="../boost/graph/adjacency_list.hpp">boost/graph/adjacency_list.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> + iterator<br> +<a href="../boost/graph/detail/adjacency_list.hpp">boost/graph/detail/adjacency_list.hpp</a><br> + <a href="../boost/graph/detail/adj_list_edge_iterator.hpp">boost/graph/detail/adj_list_edge_iterator.hpp</a><br> + <a href="../boost/graph/detail/incidence_iterator.hpp">boost/graph/detail/incidence_iterator.hpp</a><br> + utility<br> + <a href="../boost/graph/graph_concepts.hpp">boost/graph/graph_concepts.hpp</a><br> + <a href="../boost/concept_check.hpp">boost/concept_check.hpp</a><br> + <a href="../boost/iterator.hpp">boost/iterator.hpp</a><br> + <a href="../boost/pending/limits.hpp">boost/pending/limits.hpp</a><br> + float.h<br> + limits<br> + limits.h<br> + <a href="../boost/graph/graph_utility.hpp">boost/graph/graph_utility.hpp</a><br> + assert.h<br> + <a href="../boost/pending/container_traits.hpp">boost/pending/container_traits.hpp</a><br> + algorithm<br> + <a href="../boost/utility.hpp">boost/utility.hpp</a><br> + iosfwd<br> + stdlib.h<br> + <a href="../boost/graph/properties.hpp">boost/graph/properties.hpp</a><br> + <a href="../boost/operators.hpp">boost/operators.hpp</a><br> + <a href="../boost/pending/integer_range.hpp">boost/pending/integer_range.hpp</a><br> + <a href="../boost/pending/detail/int_iterator.hpp">boost/pending/detail/int_iterator.hpp</a><br> + iostream<br> + <a href="../boost/pending/iterator_adaptors.hpp">boost/pending/iterator_adaptors.hpp</a><br> + <a href="../boost/compressed_pair.hpp">boost/compressed_pair.hpp</a><br> + <a href="../boost/detail/compressed_pair.hpp">boost/detail/compressed_pair.hpp</a><br> + <a href="../boost/call_traits.hpp">boost/call_traits.hpp</a><br> + <a href="../boost/detail/call_traits.hpp">boost/detail/call_traits.hpp</a><br> + <a href="../boost/detail/ob_call_traits.hpp">boost/detail/ob_call_traits.hpp</a><br> + <a href="../boost/type_traits.hpp">boost/type_traits.hpp</a><br> + <a href="../boost/detail/ob_type_traits.hpp">boost/detail/ob_type_traits.hpp</a><br> + <a href="../boost/detail/type_traits.hpp">boost/detail/type_traits.hpp</a><br> + climits<br> + <a href="../boost/detail/ob_compressed_pair.hpp">boost/detail/ob_compressed_pair.hpp</a><br> + <a href="../boost/pending/property.hpp">boost/pending/property.hpp</a><br> + <a href="../boost/pending/detail/property.hpp">boost/pending/detail/property.hpp</a><br> + memory<br> +<a href="../boost/graph/detail/edge.hpp">boost/graph/detail/edge.hpp</a><br> +<a href="../boost/graph/graph_traits.hpp">boost/graph/graph_traits.hpp</a><br> +<a href="../boost/pending/ct_if.hpp">boost/pending/ct_if.hpp</a><br> +<a href="../boost/property_map.hpp">boost/property_map.hpp</a><br> + <a href="../boost/pending/cstddef.hpp">boost/pending/cstddef.hpp</a><br> + stddef.h<br> +hash_map<br> +hash_set<br> +list<br> +map<br> +set<br> +slist<br> +vector </td> +</tr> +<tr> +<td valign="top"><a href="../boost/graph/edge_list.hpp">boost/graph/edge_list.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> +<a href="../boost/graph/graph_traits.hpp">boost/graph/graph_traits.hpp</a><br> + <a href="../boost/utility.hpp">boost/utility.hpp</a><br> + utility<br> +<a href="../boost/pending/ct_if.hpp">boost/pending/ct_if.hpp</a><br> +<a href="../boost/pending/integer_range.hpp">boost/pending/integer_range.hpp</a><br> + <a href="../boost/pending/detail/int_iterator.hpp">boost/pending/detail/int_iterator.hpp</a><br> + <a href="../boost/iterator.hpp">boost/iterator.hpp</a><br> + <a href="../boost/operators.hpp">boost/operators.hpp</a><br> + iostream<br> + <a href="../boost/pending/iterator_adaptors.hpp">boost/pending/iterator_adaptors.hpp</a><br> + <a href="../boost/compressed_pair.hpp">boost/compressed_pair.hpp</a><br> + <a href="../boost/detail/compressed_pair.hpp">boost/detail/compressed_pair.hpp</a><br> + algorithm<br> + <a href="../boost/call_traits.hpp">boost/call_traits.hpp</a><br> + <a href="../boost/detail/call_traits.hpp">boost/detail/call_traits.hpp</a><br> + <a href="../boost/detail/ob_call_traits.hpp">boost/detail/ob_call_traits.hpp</a><br> + <a href="../boost/type_traits.hpp">boost/type_traits.hpp</a><br> + <a href="../boost/detail/ob_type_traits.hpp">boost/detail/ob_type_traits.hpp</a><br> + <a href="../boost/detail/type_traits.hpp">boost/detail/type_traits.hpp</a><br> + climits<br> + <a href="../boost/detail/ob_compressed_pair.hpp">boost/detail/ob_compressed_pair.hpp</a><br> + <a href="../boost/concept_check.hpp">boost/concept_check.hpp</a><br> + <a href="../boost/pending/limits.hpp">boost/pending/limits.hpp</a><br> + float.h<br> + limits<br> + limits.h<br> +iterator </td> +</tr> +<tr> +<td valign="top"><a href="../boost/graph/graph_concepts.hpp">boost/graph/graph_concepts.hpp</a></td> +<td><a href="../boost/concept_check.hpp">boost/concept_check.hpp</a><br> + <a href="../boost/iterator.hpp">boost/iterator.hpp</a><br> + iterator<br> + <a href="../boost/pending/limits.hpp">boost/pending/limits.hpp</a><br> + float.h<br> + limits<br> + limits.h<br> + utility<br> +<a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> +<a href="../boost/graph/graph_traits.hpp">boost/graph/graph_traits.hpp</a><br> + <a href="../boost/utility.hpp">boost/utility.hpp</a><br> +<a href="../boost/graph/properties.hpp">boost/graph/properties.hpp</a><br> + <a href="../boost/pending/property.hpp">boost/pending/property.hpp</a><br> + <a href="../boost/pending/ct_if.hpp">boost/pending/ct_if.hpp</a><br> + <a href="../boost/pending/detail/property.hpp">boost/pending/detail/property.hpp</a><br> +<a href="../boost/property_map.hpp">boost/property_map.hpp</a><br> + <a href="../boost/pending/cstddef.hpp">boost/pending/cstddef.hpp</a><br> + stddef.h </td> +</tr> +<tr> +<td valign="top"><a href="../boost/graph/graph_traits.hpp">boost/graph/graph_traits.hpp</a></td> +<td><a href="../boost/utility.hpp">boost/utility.hpp</a><br> + <a href="../boost/config.hpp">boost/config.hpp</a><br> + cstdlib<br> + cstddef<br> + utility<br> +iterator </td> +</tr> +<tr> +<td valign="top"><a href="../boost/graph/properties.hpp">boost/graph/properties.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> + iterator<br> +<a href="../boost/pending/property.hpp">boost/pending/property.hpp</a><br> + <a href="../boost/pending/ct_if.hpp">boost/pending/ct_if.hpp</a><br> + <a href="../boost/pending/detail/property.hpp">boost/pending/detail/property.hpp</a><br> + utility<br> +<a href="../boost/property_map.hpp">boost/property_map.hpp</a><br> + <a href="../boost/concept_check.hpp">boost/concept_check.hpp</a><br> + <a href="../boost/iterator.hpp">boost/iterator.hpp</a><br> + <a href="../boost/pending/limits.hpp">boost/pending/limits.hpp</a><br> + float.h<br> + limits<br> + limits.h<br> + <a href="../boost/pending/cstddef.hpp">boost/pending/cstddef.hpp</a><br> + stddef.h </td> +</tr> +<tr> +<td valign="top"><a href="../boost/graph/visitors.hpp">boost/graph/visitors.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> + iterator<br> +<a href="../boost/graph/detail/is_same.hpp">boost/graph/detail/is_same.hpp</a><br> + <a href="../boost/pending/ct_if.hpp">boost/pending/ct_if.hpp</a><br> +<a href="../boost/graph/graph_traits.hpp">boost/graph/graph_traits.hpp</a><br> + <a href="../boost/utility.hpp">boost/utility.hpp</a><br> + utility<br> +<a href="../boost/pending/limits.hpp">boost/pending/limits.hpp</a><br> + float.h<br> + limits<br> + limits.h<br> +<a href="../boost/property_map.hpp">boost/property_map.hpp</a><br> + <a href="../boost/concept_check.hpp">boost/concept_check.hpp</a><br> + <a href="../boost/iterator.hpp">boost/iterator.hpp</a><br> + <a href="../boost/pending/cstddef.hpp">boost/pending/cstddef.hpp</a><br> + stddef.h<br> +iosfwd </td> +</tr> +<tr> +<td valign="top"><a href="../boost/integer.hpp">boost/integer.hpp</a></td> +<td>limits </td> +</tr> +<tr> +<td valign="top"><a href="../boost/integer_traits.hpp">boost/integer_traits.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> + iterator<br> +limits<br> +limits.h </td> +</tr> +<tr> +<td valign="top"><a href="../boost/iterator.hpp">boost/iterator.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> +iterator </td> +</tr> +<tr> +<td valign="top"><a href="../boost/nondet_random.hpp">boost/nondet_random.hpp</a></td> +<td>algorithm<br> +<a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> + iterator<br> +<a href="../boost/integer_traits.hpp">boost/integer_traits.hpp</a><br> + limits<br> + limits.h<br> +<a href="../boost/utility.hpp">boost/utility.hpp</a><br> + utility<br> +cmath<br> +string </td> +</tr> +<tr> +<td valign="top"><a href="../boost/operators.hpp">boost/operators.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> + iterator<br> +<a href="../boost/iterator.hpp">boost/iterator.hpp</a> </td> +</tr> +<tr> +<td valign="top"><a href="../boost/pattern_except.hpp">boost/pattern_except.hpp</a></td> +<td>stdexcept </td> +</tr> +<tr> +<td valign="top"><a href="../boost/progress.hpp">boost/progress.hpp</a></td> +<td><a href="../boost/timer.hpp">boost/timer.hpp</a><br> + <a href="../boost/smart_ptr.hpp">boost/smart_ptr.hpp</a><br> + algorithm<br> + <a href="../boost/config.hpp">boost/config.hpp</a><br> + cstdlib<br> + iterator<br> + cstddef<br> + functional<br> + memory<br> +<a href="../boost/utility.hpp">boost/utility.hpp</a><br> + utility<br> +iosfwd </td> +</tr> +<tr> +<td valign="top"><a href="../boost/property_map.hpp">boost/property_map.hpp</a></td> +<td><a href="../boost/concept_check.hpp">boost/concept_check.hpp</a><br> + <a href="../boost/iterator.hpp">boost/iterator.hpp</a><br> + <a href="../boost/pending/limits.hpp">boost/pending/limits.hpp</a><br> + float.h<br> + limits<br> + limits.h<br> + utility<br> +<a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> +<a href="../boost/pending/cstddef.hpp">boost/pending/cstddef.hpp</a><br> + stddef.h<br> +iterator </td> +</tr> +<tr> +<td valign="top"><a href="../boost/random.hpp">boost/random.hpp</a></td> +<td>algorithm<br> +<a href="../boost/cstdint.hpp">boost/cstdint.hpp</a><br> + <a href="../boost/config.hpp">boost/config.hpp</a><br> + cstdlib<br> + limits.h<br> + stdint.h<br> +<a href="../boost/integer_traits.hpp">boost/integer_traits.hpp</a><br> +<a href="../boost/operators.hpp">boost/operators.hpp</a><br> + <a href="../boost/iterator.hpp">boost/iterator.hpp</a><br> +<a href="../boost/utility.hpp">boost/utility.hpp</a><br> + utility<br> +cassert<br> +cmath<br> +cstddef<br> +functional<br> +iostream<br> +iterator<br> +limits<br> +vector </td> +</tr> +<tr> +<td valign="top"><a href="../boost/rational.hpp">boost/rational.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + iterator<br> +<a href="../boost/operators.hpp">boost/operators.hpp</a><br> + <a href="../boost/iterator.hpp">boost/iterator.hpp</a><br> +cstdlib<br> +iostream<br> +stdexcept<br> +string </td> +</tr> +<tr> +<td valign="top"><a href="../boost/regex.hpp">boost/regex.hpp</a></td> +<td><a href="../boost/cregex.hpp">boost/cregex.hpp</a><br> + string<br> + vector<br> +<a href="../boost/pattern_except.hpp">boost/pattern_except.hpp</a><br> + stdexcept<br> +<a href="../boost/re_detail/regex_compile.hpp">boost/re_detail/regex_compile.hpp</a><br> +<a href="../boost/re_detail/regex_config.hpp">boost/re_detail/regex_config.hpp</a><br> + algo.h<br> + algorithm<br> + <a href="../boost/re_detail/regex_library_include.hpp">boost/re_detail/regex_library_include.hpp</a><br> + <a href="../boost/re_detail/regex_options.hpp">boost/re_detail/regex_options.hpp</a><br> + <a href="../boost/smart_ptr.hpp">boost/smart_ptr.hpp</a><br> + <a href="../boost/config.hpp">boost/config.hpp</a><br> + <a href="../boost/utility.hpp">boost/utility.hpp</a><br> + functional<br> + cctype<br> + clocale<br> + cstddef<br> + cstdio<br> + cstdlib<br> + cwchar<br> + cwctype<br> + exception<br> + iostream<br> + iostream.h<br> + iterator<br> + locale<br> + memory<br> + stdlib.h<br> + utility<br> + windows.h<br> +<a href="../boost/re_detail/regex_format.hpp">boost/re_detail/regex_format.hpp</a><br> +<a href="../boost/re_detail/regex_kmp.hpp">boost/re_detail/regex_kmp.hpp</a><br> +<a href="../boost/re_detail/regex_match.hpp">boost/re_detail/regex_match.hpp</a><br> +<a href="../boost/re_detail/regex_raw_buffer.hpp">boost/re_detail/regex_raw_buffer.hpp</a><br> +<a href="../boost/re_detail/regex_split.hpp">boost/re_detail/regex_split.hpp</a><br> +<a href="../boost/re_detail/regex_stack.hpp">boost/re_detail/regex_stack.hpp</a><br> +<a href="../boost/regex_traits.hpp">boost/regex_traits.hpp</a><br> + <a href="../boost/re_detail/regex_cstring.hpp">boost/re_detail/regex_cstring.hpp</a><br> +<a href="../boost/type_traits.hpp">boost/type_traits.hpp</a><br> + <a href="../boost/detail/ob_type_traits.hpp">boost/detail/ob_type_traits.hpp</a><br> + <a href="../boost/detail/type_traits.hpp">boost/detail/type_traits.hpp</a><br> + climits<br> +cstring<br> +iosfwd<br> +new<br> +typeinfo </td> +</tr> +<tr> +<td valign="top"><a href="../boost/regex_traits.hpp">boost/regex_traits.hpp</a></td> +<td><a href="../boost/cregex.hpp">boost/cregex.hpp</a><br> + <a href="../boost/re_detail/regex_config.hpp">boost/re_detail/regex_config.hpp</a><br> + algo.h<br> + algorithm<br> + <a href="../boost/re_detail/regex_library_include.hpp">boost/re_detail/regex_library_include.hpp</a><br> + <a href="../boost/re_detail/regex_options.hpp">boost/re_detail/regex_options.hpp</a><br> + <a href="../boost/smart_ptr.hpp">boost/smart_ptr.hpp</a><br> + <a href="../boost/config.hpp">boost/config.hpp</a><br> + <a href="../boost/utility.hpp">boost/utility.hpp</a><br> + functional<br> + cctype<br> + clocale<br> + cstddef<br> + cstdio<br> + cstdlib<br> + cstring<br> + cwchar<br> + cwctype<br> + exception<br> + iostream<br> + iostream.h<br> + iterator<br> + memory<br> + stdlib.h<br> + utility<br> + windows.h<br> + string<br> + vector<br> +<a href="../boost/re_detail/regex_cstring.hpp">boost/re_detail/regex_cstring.hpp</a><br> +locale </td> +</tr> +<tr> +<td valign="top"><a href="../boost/smart_ptr.hpp">boost/smart_ptr.hpp</a></td> +<td>algorithm<br> +<a href="../boost/config.hpp">boost/config.hpp</a><br> + cstdlib<br> + iterator<br> +<a href="../boost/utility.hpp">boost/utility.hpp</a><br> + utility<br> +cstddef<br> +functional<br> +memory </td> +</tr> +<tr> +<td valign="top"><a href="../boost/static_assert.hpp">boost/static_assert.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> + iterator </td> +</tr> +<tr> +<td valign="top"><a href="../boost/timer.hpp">boost/timer.hpp</a></td> +<td><a href="../boost/smart_ptr.hpp">boost/smart_ptr.hpp</a><br> + algorithm<br> + <a href="../boost/config.hpp">boost/config.hpp</a><br> + cstdlib<br> + iterator<br> + <a href="../boost/utility.hpp">boost/utility.hpp</a><br> + utility<br> + cstddef<br> + functional<br> + memory </td> +</tr> +<tr> +<td valign="top"><a href="../boost/type_traits.hpp">boost/type_traits.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstddef<br> + cstdlib<br> + iterator<br> +<a href="../boost/detail/ob_type_traits.hpp">boost/detail/ob_type_traits.hpp</a><br> +<a href="../boost/detail/type_traits.hpp">boost/detail/type_traits.hpp</a><br> + climits </td> +</tr> +<tr> +<td valign="top"><a href="../boost/utility.hpp">boost/utility.hpp</a></td> +<td><a href="../boost/config.hpp">boost/config.hpp</a><br> + cstdlib<br> + iterator<br> +cstddef<br> +utility </td> +</tr> +</table> +</body> +</html> diff --git a/libs/integer b/libs/integer new file mode 160000 +Subproject 39a0119d2f89e95a8755b45c3acbfcd2241e4a1 diff --git a/libs/iterator b/libs/iterator new file mode 160000 +Subproject 671474e5214a772d304afc9105086a2bd9c001b diff --git a/libs/libraries.htm b/libs/libraries.htm new file mode 100644 index 0000000000..3e11cf3865 --- /dev/null +++ b/libs/libraries.htm @@ -0,0 +1,179 @@ +<html> + +<head> +<meta http-equiv="Content-Type" +content="text/html; charset=iso-8859-1"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<title>Libraries</title> +<meta name="Microsoft Border" content="none, default"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" cellpadding="2" bgcolor="#007F7F"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" + alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font color="#FFFFFF" size="4" + face="Arial">Home</font></a></td> + <td><a href="libraries.htm"><font color="#FFFFFF" + size="4" face="Arial">Libraries</font></a></td> + <td><a href="../people/people.htm"><font color="#FFFFFF" + size="4" face="Arial">People</font></a></td> + <td><a href="../more/faq.htm"><font color="#FFFFFF" + size="4" face="Arial">FAQ</font></a></td> + <td><a href="../more/index.htm"><font color="#FFFFFF" + size="4" face="Arial">More</font></a></td> + </tr> +</table> + +<h1>Boost Libraries</h1> + +<ul> + <li><a href="array/index.htm">array</a> - STL compliant + container wrapper for arrays of constant size from + Nicolai Josuttis.</li> + <li><a href="utility/call_traits.htm">call_traits</a> - + Defines types for passing parameters from John Maddock, + Howard Hinnant, et al.</li> + <li><a href="compose/index.htm">compose</a> - Functional + composition adapters for the STL from Nicolai Josuttis.</li> + <li><a href="utility/compressed_pair.htm">compressed_pair</a> + - Empty member optimization from John Maddock, Howard + Hinnant, et al.</li> + <li><a href="concept_check/concept_check.htm">concept check</a> - Tools for + generic programming from Jeremy Siek.</li> + <li><a href="config/index.htm">config</a> - Helps boost + library developers adapt to compiler idiosyncrasies; not + intended for library users.</li> + <li><a href="conversion/index.htm">conversion</a> - Numeric, polymorphic, + and lexical casts from Dave Abrahams and Kevlin Henney.</li> + <li><a href="dir_it/index.htm">dir_it</a> - A set of file + system directory level iterators from Dietmar Kühl.</li> + <li><a href="functional/index.html">functional</a> - Enhanced + function object adaptors from Mark Rodgers.</li> + <li><a href="graph/doc/table_of_contents.html">graph</a> - + Generic graph components and algorithms from Jeremy Siek and a University of Notre Dame team.</li> + <li><a href="integer/index.htm">integer</a> - Headers to ease + dealing with integral types.</li> + <li><a href="utility/operators.htm">operators</a> - Templates + ease arithmetic classes and iterators from Dave Abrahams + and Jeremy Siek.</li> + <li><a href="property_map/property_map.html">property map</a> - Concepts + defining interfaces which map key objects to value objects from Jeremy + Siek.</li> + <li><a href="python/doc/index.html">python</a> - reflects C++ classes and + functions into <a href="http://www.python.org">Python</a>, from Dave + Abrahams.</li> + <li><a href="random/index.html">random</a> - A complete + system for random number generation from Jens Maurer.</li> + <li><a href="rational/index.html">rational</a> - A rational + number class from Paul Moore.</li> + <li><a href="regex/index.htm">regex</a> - Regular expression + library from John Maddock.</li> + <li><a href="smart_ptr/index.htm">smart_ptr</a> - Four smart + pointer classes from Greg Colvin and Beman Dawes.</li> + <li><a href="static_assert/static_assert.htm">static_assert</a> + - static assertions (compile time assertions) from + John Maddock.</li> + <li><a href="timer/index.htm">timer</a> - Event timer, + progress timer, and progress display classes from Beman + Dawes.</li> + <li><a href="utility/type_traits.htm">type_traits</a> - + Templates for fundamental properties of types from John + Maddock, Steve Cleary, et al.</li> + <li><a href="utility/utility.htm">utility</a> - Class <b>noncopyable</b> + plus <b>next(),</b> <b>prior(),</b> and <b>tie()</b> + function templates from Dave Abrahams and others. </li> +</ul> + +<p>See <a href="compiler_status.htm">Compiler Status</a> to find +out what library works with which compiler.</p> + +<p>See <a href="hdr_depend.html">Header Dependencies</a> to find +out what other headers each boost header includes.</p> + +<h2>Obsolete Libraries</h2> + +<ul> + <li><a href="min_rand/index.htm">min_rand</a> - a random + number generator class from Beman Dawes. Replaced by <a + href="random/index.html">random</a>.</li> +</ul> + +<h2>Beta Libraries</h2> + +<ul> + <li><a href="array_traits/index.html">array_traits</a> - + tools to treat built-in arrays more like STL containers + from Dietmar Kühl. Also see <a href="array/index.htm">array</a>.</li> + <li><a href="pri_queue/index.html">heaps</a> - a heap of + priority queues from Dietmar Kühl.</li> +</ul> + +<h2><a name="Download">Download</a></h2> + +<h3>.zip file</h3> + +<p>You may <a href="../boost_all.zip">download all of boost</a> +as a single boost_all.zip file. As many boost headers +include other boost headers, installing one at at time is painful. +This is a first try at making installation easier.</p> + +<p>If you don't already have a .zip file decoder, download one +from the <a href="http://www.info-zip.org/pub/infozip/">Info-ZIP</a> +web site. The .zip format is used for distribution because there +are free decoders and encoders available for many, many different +platforms. Many commercial compress/archive utilities also +support this format.</p> + +<p>Unix/Linux hints: boost_all.zip is built on a Win32 platform, so the line +endings are wrong for Unix/Linux. Use the -a option when unzipping with InfoZip +for Unix/Linux friendly line endings. Also note that a Linux user reports his decoder +required renaming boost_all.zip +to boost_all.ZIP.</p> + +<h3>CVS archive</h3> + +<p>For those who have CVS installed, the libraries can also be +downloaded from the public CVS repository. The general procedure +goes something like this:</p> + +<blockquote> + <pre>cvs -d:pserver:anonymous@cvs.boost.sourceforge.net:/cvsroot/boost login + [Hit <return> when it asks for a password] +cvs -z3 -d:pserver:anonymous@cvs.boost.sourceforge.net:/cvsroot/boost checkout boost +cvs -d:pserver:anonymous@cvs.boost.sourceforge.net:/cvsroot/boost logout</pre> +</blockquote> + +<h2>Installing Boost Libraries</h2> + +<p>Many boost libraries are implemented entirely within their +header files. The only preparation for their use is to add +the path for the parent directory of the boost header sub-directory +to your compiler's list of #include search directories.</p> + +<blockquote> + <p>For example, using Windows 2000, if you have unzipped + release 1.18.1 from boost_all.zip into the top level + directory of your C drive, for Borland, GCC, and Metrowerks + compilers add '-Ic:/boost_1_18_1' to the compiler command + line, and for the Microsoft compiler add '/I "c:/boost_1_18_1"'. + For IDE's, add 'c:/boost_1_18_1' (or whatever you have + renamed it to) to the search list using the appropriate GUI + dialog.</p> +</blockquote> + +<p>A few boost libraries are implemented by separate source files, +and thus require compilation on your system to link properly. +Boost does not currently have an overall "build" or +"make" mechanism in place. Some of the individual libraries do include +make and/or project files for various compilers.</p> + +<hr> + +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" +s-format="%d %b %Y" startspan -->06 Jan 2001<!--webbot bot="Timestamp" endspan i-checksum="14736" --></p> +</body> +</html> diff --git a/libs/property_map b/libs/property_map new file mode 160000 +Subproject 957e553e3bc9a035dfd39f9b8605db898a9b226 diff --git a/libs/python b/libs/python new file mode 160000 +Subproject 56614b282dd930d46efd8100f54f0d9b00827f0 diff --git a/libs/random b/libs/random new file mode 160000 +Subproject 54e4a8c0f0487fce7ce0e5e2441856223ca1405 diff --git a/libs/rational b/libs/rational new file mode 160000 +Subproject 38c54703f06164f060a38317891f290ac987aa1 diff --git a/libs/regex b/libs/regex new file mode 160000 +Subproject 51c795efb90b15f91b251f7e43e765c5571863d diff --git a/libs/regression.cfg b/libs/regression.cfg new file mode 100644 index 0000000000..901673094c --- /dev/null +++ b/libs/regression.cfg @@ -0,0 +1,39 @@ +// Boost primary regression test configuration file + +compile libs/config/config_test.cpp +run libs/array/array1.cpp +compile libs/concept_check/concept_check_test.cpp +compile libs/concept_check/class_concept_check_test.cpp +link-fail libs/concept_check/concept_check_fail_expected.cpp +link-fail libs/concept_check/class_concept_fail_expected.cpp +run libs/conversion/cast_test.cpp +run libs/conversion/lexical_cast_test.cpp +run libs/functional/function_test.cpp +run libs/graph/test/graph.cpp +run libs/integer/cstdint_test.cpp +run libs/integer/integer_test.cpp +run libs/integer/integer_traits_test.cpp +run libs/rational/rational_example.cpp +run libs/random/random_test.cpp +run libs/random/random_demo.cpp +run libs/regex/demo/regress/regex_test.cpp regex/demo/regress/tests.txt +run libs/regex/demo/regress/wregex_test.cpp regex/demo/regress/tests.txt +run libs/smart_ptr/smart_ptr_test.cpp +compile libs/static_assert/static_assert_test.cpp +compile-fail libs/static_assert/static_assert_test_fail_1.cpp +compile-fail libs/static_assert/static_assert_test_fail_2.cpp +compile-fail libs/static_assert/static_assert_test_fail_3.cpp +compile-fail libs/static_assert/static_assert_test_fail_4.cpp +compile-fail libs/static_assert/static_assert_test_fail_5.cpp +compile-fail libs/static_assert/static_assert_test_fail_6.cpp +compile-fail libs/static_assert/static_assert_test_fail_7.cpp +compile-fail libs/static_assert/static_assert_test_fail_8.cpp +compile libs/timer/timer.cpp +compile libs/timer/timer_test.cpp +compile libs/utility/call_traits_test.cpp +compile libs/utility/compressed_pair_test.cpp +run libs/utility/iterator_adaptor_test.cpp +run libs/utility/iterators_test.cpp +run libs/utility/operators_test.cpp +run libs/utility/tie_example.cpp +compile libs/utility/type_traits_test.cpp diff --git a/libs/regression.cpp b/libs/regression.cpp new file mode 100644 index 0000000000..c619af5f5d --- /dev/null +++ b/libs/regression.cpp @@ -0,0 +1,386 @@ +/* boost regression test program + * + * Copyright Jens Maurer 2000 + * Permission to use, copy, modify, sell, and distribute this software + * is hereby granted without free provided that the above copyright notice + * appears in all copies and that both that copyright notice and this + * permission notice appear in supporting documentation, + * + * Jens Maurer makes no representations about the suitability of this + * software for any purpose. It is provided "as is" without express or + * implied warranty. + * + * See http://www.boost.org for most recent version including documentation. + */ + +#include <iostream> +#include <string> +#include <list> +#include <vector> +#include <cstdlib> +#include <fstream> +#include <utility> +#include <ctime> + +// It is OK to use boost headers which contain entirely inline code. +#include <boost/config.hpp> +#ifdef BOOST_NO_STDC_NAMESPACE + namespace std { + using ::exit; using ::system; using ::strftime; using ::gmtime; + using ::time; using ::time_t; + } +#endif + +std::string get_host() +{ +#if defined __linux__ + return "linux"; +#elif defined __osf__ + return "tru64"; +#elif defined __sgi + return "irix"; +#elif defined _WIN32 + return "win32"; +#elif defined __BEOS__ + return "beos"; +#else +# error Please adapt for your platform +#endif +} + + +// retrieve precise system configuration as descriptive string +#ifdef __unix + +#include <sys/utsname.h> + +std::string get_system_configuration() +{ + struct utsname ut; // "struct" is required for the DEC Tru64 compiler + if(uname(&ut) < 0) + return ""; + + std::string config = std::string(ut.sysname) + " " + ut.release; + config = config + " (CPU: " + ut.machine + ")"; + return config; +} + +#elif defined _WIN32 + +std::string get_system_configuration() +{ + return "Microsoft Windows 32bit"; +} + +#elif defined __BEOS__ + +std::string get_system_configuration() +{ + return "BeOS"; +} + +#else +# error Please adapt for your platform +#endif + + +struct configuration +{ + std::string compiler_config_file, test_config_file; + std::string boostpath; + std::string html_output; + std::string compiler, test; + + // defaults + configuration() + : compiler_config_file("compiler.cfg"), test_config_file("regression.cfg"), + boostpath(".."), html_output("cs-" + get_host() + ".html"), + compiler("*"), test("") { } +}; + +configuration parse_command_line(char **first, char **last) +{ + configuration cfg; + for( ; first != last; ++first) { + std::string arg = *first; + if(arg == "--config") { + cfg.compiler_config_file = *++first; + } else if(arg == "--tests") { + cfg.test_config_file = *++first; + } else if(arg == "--boost") { + cfg.boostpath = *++first; + } else if(arg == "-o" || arg == "--output") { + cfg.html_output = *++first; + } else if(arg == "--compiler") { + cfg.compiler = *++first; + } else if(arg.substr(0,1) == "-") { + std::cerr << "usage: regression [-h | --help] [--config compiler.cfg]\n" + << " [--tests regression.cfg] [--boost path] [-o output.html] [--compiler <name>]\n" + << " [test]\n" + << " -h or --help print this help message\n" + << " --config <file> compiler configuration file (default: compiler.cfg)\n" + << " --tests <file> test configuration file (default: regression.cfg)\n" + << " --boost <path> filesystem path to main boost directory (default: ..)\n" + << " -o <file> name of output file (default: cs-OS.html)\n" + << " --compiler <name> use only compiler <name> (default: *)\n" + << " test a single test, including the action (compile, run, etc.)\n"; + std::exit(1); + } else { + // add the rest of the command line to the "test" line + for( ; first != last; ++first) + cfg.test += std::string(*first) + " "; + break; + } + } + return cfg; +} + + +struct entry +{ + std::string os, identifier, name, compile_only_command, compile_link_command, html; +}; + +// replace the first %name in s with value +void replace(std::string & s, + const std::string & name, const std::string & value) +{ + std::string::size_type p = s.find(name); + if(p != std::string::npos) + s.replace(p, name.length(), value); +} + +// replace all $XXX in s with the value of getenv("XXX") +void replace_environment(std::string & s) +{ + std::string::size_type end = 0; + for(;;) { + std::string::size_type pos = s.find('$', end); + if(pos == std::string::npos) + break; + end = s.find_first_not_of("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_", pos+1); + const char * env = getenv(s.substr(pos+1, end-pos-1).c_str()); + if(env) + replace(s, s.substr(pos, end-pos), env); + else + break; + } +} + +// get a string line, ignoring empty lines and comment lines +void getstringline( std::ifstream & is, std::string & s ) +{ + do { + std::getline( static_cast<std::istream&>(is), s ); // cast required by IRIX + } while ( is.good() + && (!s.size() || (s.size() >= 2 && s[0] == '/' && s[1] == '/')) ); +} + +// read the compiler configuration from file and push entry's to out +template<class OutputIterator> +void read_compiler_configuration(const std::string & file, OutputIterator out) +{ + std::ifstream f(file.c_str()); + int lineno = 0; + while(f.good()) { + entry e; + getstringline(f, e.os); + getstringline(f, e.identifier); + getstringline(f, e.name); + getstringline(f, e.compile_only_command); + getstringline(f, e.compile_link_command); + getstringline(f, e.html); + *out = e; + ++out; + std::string l; + std::getline(f, l); + lineno += 6; + if(l != "") { + std::cerr << file << ", line " << lineno + << ": Empty line expected, got " << l << "\n"; + std::exit(1); + } + } +} + +// run command (possibly needs portability adjustment) +bool execute(const std::string & command) +{ + std::cout << command << std::endl; // fix: endl ensures cout ordering + return std::system(command.c_str()) == 0; +} + +enum test_result { + ok = 0, + unknown_type, + compile_failed, compile_ok, link_failed, link_ok, run_failed, run_ok +}; + +test_result compile(std::string command, const std::string & boostpath, + const std::string & file) +{ + replace(command, "%source", boostpath + "/" + file); + return execute(command) ? compile_ok : compile_failed; +} + +test_result link(std::string command, const std::string & boostpath, + const std::string & file) +{ + replace(command, "%source", boostpath + "/" + file); + return execute(command) ? link_ok : link_failed; +} + +test_result run(std::string command, const std::string & boostpath, + const std::string & file, const std::string & args) +{ + std::string exename = "boosttmp.exe"; + replace(command, "%source", boostpath + "/" + file); + if(execute(command)) { + if(get_host() != "win32") + exename = "./" + exename; + return execute(exename + " " + args) ? run_ok : run_failed; + } else { + return link_failed; + } +} + +std::pair<test_result, test_result> +run_test(const std::string & type, std::string compile_only_command, + std::string compile_link_command, + const std::string & boostpath, const std::string & source, + const std::string & args) +{ + replace(compile_only_command, "%include", boostpath); + replace(compile_link_command, "%include", boostpath); + if(type == "compile") + return std::make_pair(compile(compile_only_command, boostpath, source), compile_ok); + else if(type == "compile-fail") + return std::make_pair(compile(compile_only_command, boostpath, source), compile_failed); + else if(type == "link") + return std::make_pair(link(compile_link_command, boostpath, source), link_ok); + else if(type == "link-fail") + return std::make_pair(link(compile_link_command, boostpath, source), link_failed); + else if(type == "run") + return std::make_pair(run(compile_link_command, boostpath, source, args), run_ok); + else if(type == "run-fail") + return std::make_pair(run(compile_link_command, boostpath, source, args), run_failed); + else + return std::make_pair(unknown_type, ok); +} + +template<class ForwardIterator> +void do_tests(std::ostream & out, + ForwardIterator firstcompiler, ForwardIterator lastcompiler, + const std::string & testconfig, const std::string & boostpath) +{ + out << "<tr>\n" + << "<td>Program</td>\n" + << "<td>Test<br>Type</td>\n"; + for(ForwardIterator it = firstcompiler; it != lastcompiler; ++it) { + out << "<td>" << it->html << "</td>\n"; + } + out << "</tr>\n"; + + std::ifstream f(testconfig.c_str()); + while(f.good()) { + std::string l; + getstringline(f, l); + if (!f.good()) break; + typedef std::string::size_type sz_type; + sz_type p = l.find(' '); + if(p == std::string::npos) { + std::cerr << "Test " << l << " is wrong\n"; + continue; + } + std::string type(l, 0, p); + sz_type end_filename = l.find(' ', p+1); + std::string file, args; + if(end_filename == std::string::npos) { + file = l.substr(p+1, std::string::npos); + } else { + file = l.substr(p+1, end_filename-(p+1)); + args = l.substr(end_filename+1, std::string::npos); + } + + std::cout << "*** " << file << " ***\n\n"; + + out << "<tr>\n" + << "<td><a href=\"../" << file << "\">" << file << "</a></td>\n" + << "<td>" << type << "</td>\n"; + + for(ForwardIterator it = firstcompiler; it != lastcompiler; ++it) { + std::cout << "** " << it->name << "\n"; + std::pair<test_result, test_result> result = + run_test(type, it->compile_only_command, it->compile_link_command, boostpath, file, args); + if(result.first == unknown_type) { + std::cerr << "Unknown test type " << type << ", skipped\n"; + continue; + } + out << "<td>" + << (result.first == result.second ? "Pass" : "<font color=\"#FF0000\">Fail</font>") + << "</td>" << std::endl; + std::cout << (result.first == result.second ? "Pass" : "Fail") << "\n\n"; + } + out << "</tr>\n"; + } +} + + +int main(int argc, char * argv[]) +{ + configuration config = parse_command_line(argv+1, argv+argc); + + std::list<entry> l; + read_compiler_configuration(config.compiler_config_file, + std::back_inserter(l)); + std::string host = get_host(); + for(std::list<entry>::iterator it = l.begin(); it != l.end(); ) { + if(it->os == host && (config.compiler == "*" || + it->identifier == config.compiler)) { + replace_environment(it->compile_only_command); + replace_environment(it->compile_link_command); + ++it; + } else { + it = l.erase(it); + } + } + + // if explicit test requested, write temporary file for do_tests + if(config.test != "") { + std::ofstream tmp((config.test_config_file="boosttmp.tmp").c_str()); + tmp << config.test << std::endl; + } + + std::ofstream out( config.html_output.c_str() ); + + char run_date[100]; + std::time_t ct; + std::time(&ct); + std::strftime(run_date, sizeof(run_date), "%d %b %Y %H:%M GMT", std::gmtime(&ct)); + + out << "<html>\n<head>\n<title>\nCompiler Status: " + host + "\n</title>\n</head>\n" + << "<body bgcolor=\"#ffffff\" text=\"#000000\">\n" + << "<h1><img border border=\"0\" src=\"../c++boost.gif\" width=\"277\" height=\"86\"></h1>\n" + << "<h1>Compiler Status: " + host + "</h1>\n" + << "\n" + << "<p><b>Run Date:</b> " << run_date << "</p>\n" + << "<p><b>System Configuration:</b> " << get_system_configuration() + << "</p>\n" + << "<p>\n" + << "<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">\n"; + + do_tests(out, l.begin(), l.end(), config.test_config_file, config.boostpath); + + out << "</table></p>\n<p>\n"; + if(host == "linux") + out << "Notes: A hand-crafted <limits> Standard header has been\n" + << "applied to all configurations.\n" + << "The tests were run on a GNU libc 2.2 system which has improved\n" + << "wide character support compared to previous versions."; + else if(host == "irix" || host == "tru64") + out << "Note: For the 'clib' configuration, the missing new-style C\n" + << "library headers <cXXX> have been supplied.\n"; + + out << "</p>\n</body>\n</html>" << std::endl; + return 0; +} diff --git a/libs/smart_ptr b/libs/smart_ptr -Subproject c47f309991b83794f0f037a320dc223939d65b0 +Subproject 16c8fd7ed8017ee676aff4d573307abea6cf4a9 diff --git a/libs/static_assert b/libs/static_assert new file mode 160000 +Subproject 5c7d66c93e1b799c90fd1d54a3813b717a398bf diff --git a/libs/timer b/libs/timer new file mode 160000 +Subproject db98ee69c710f26f8ffbacb088896f41e8ce0a5 diff --git a/libs/type_traits b/libs/type_traits new file mode 160000 +Subproject 2dd31959dbcf52cdc15d6f06a9f2d7ad562db8f diff --git a/libs/utility b/libs/utility new file mode 160000 +Subproject e7940ce7bf3c51b7f12cc1af59c43f10f2e9e49 diff --git a/more/borland_cpp.html b/more/borland_cpp.html new file mode 100644 index 0000000000..2a6a7b5e53 --- /dev/null +++ b/more/borland_cpp.html @@ -0,0 +1,362 @@ +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Portability Hints: Borland C++ 5.5.1</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial,Helvetica" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial,Helvetica" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people/people.htm"><font face="Arial,Helvetica" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="faq.htm"><font face="Arial,Helvetica" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="index.htm"><font face="Arial,Helvetica" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> + +<p> + +<h1>Portability Hints: Borland C++ 5.5.1</h1> + +It is a general aim for boost libraries to be +<a href="lib_guide.htm#Portability">portable</a>. The primary means +for achieving this goal is to adhere to ISO Standard C++. However, +ISO C++ is a broad and complex standard and most compilers are +not fully conformant to ISO C++ yet. In order to achieve portability +in the light of this restriction, it seems advisable to get acquainted +with those language features that some compilers do not fully +implement yet. +<p> + +This page gives portability hints on some language features of the +Borland C++ version 5.5.1 compiler. Furthermore, the appendix +presents additional problems with Borland C++ version 5.5. Borland +C++ 5.5.1 is a freely available command-line compiler for Win32 +available at +<a href="http://www.borland.com/">http://www.borland.com/</a>. +<p> + +Each entry in the following list describes a particular issue, +complete with sample source code to demonstrate the effect. +Most sample code herein has been verified to compile with gcc 2.95.2 +and Comeau C++ 4.2.44. + + +<h2>Preprocessor symbol</h2> + +The preprocessor symbol <code>__BORLANDC__</code> is defined for all +Borland C++ compilers. Its value is the version number of the +compiler interpreted as a hexadecimal number. The following table +lists some known values. +<p> + +<table border="1"> +<tr> +<th>Compiler</th> +<th><code>__BORLANDC__</code> value</th> +</tr> + +<tr> +<td>Borland C++ Builder 4</td> +<td>0x0540</td> +</tr> + +<tr> +<td>Borland C++ Builder 5</td> +<td>0x0550</td> +</tr> + +<tr> +<td>Borland C++ 5.5</td> +<td>0x0550</td> +</tr> + +<tr> +<td>Borland C++ 5.5.1</td> +<td>0x0551</td> +</tr> + +</table> + +<h2>Core Language</h2> + +<h3>[using-directive] Mixing <code>using</code>-declarations and +<code>using</code>-directives</h3> + +Mixing <code>using</code>-directives (which refer to whole namespaces) +and namespace-level <code>using</code>-declarations (which refer to +individual identifiers within foreign namespaces) causes ambiguities +where there are none. The following code fragment illustrates this: + +<pre> +namespace N { + int x(); +} + +using N::x; +using namespace N; + +int main() +{ + &x; // Ambiguous overload +} +</pre> + + +<h3>[using template] <code>using</code>-declarations for class +templates</h3> + +Identifiers for class templates can be used as arguments to +<code>using</code>-declarations as any other identifier. However, the +following code fails to compile with Borland C++: + +<pre> +template<class T> +class X { }; + +namespace N +{ + // "cannot use template 'X<T>' without specifying specialization parameters" + using ::X; +}; +</pre> + + +<h3>[template const arg] Deduction of constant arguments to function +templates</h3> + +Template function type deduction should omit top-level constness. +However, this code fragment instantiates "f<const int>(int)": + +<pre> +template<class T> +void f(T x) +{ + x = 1; // works + (void) &x; + T y = 17; + y = 20; // "Cannot modify a const object in function f<const int>(int)" + (void) &y; +} + +int main() +{ + const int i = 17; + f(i); +} +</pre> + +The boost/rational.hpp header exhibits this problem in connection with +the gcd() function. + + +<h3>[function address] Resolving addresses of overloaded +functions</h3> + +Addresses of overloaded functions are not in all contexts properly +resolved (std:13.4 [over.over]); here is a small example: +<pre> +template<class Arg> +void f( void(*g)(Arg) ); + +void h(int); +void h(double); + +template<class T> +void h2(T); + +int main() +{ + void (*p)(int) = h; // this works (std:13.4-1.1) + void (*p2)(unsigned char) = h2; // this works as well (std:13.4-1.1) + f<int>(h2); // this also works (std:13.4-1.3) + + // "Cannot generate template specialization from h(int)", + // "Could not find a match for f<Arg>(void (*)(int))" + f<double>(h); // should work (std:13.4-1.3) + + f( (void(*)(double))h); // C-style cast works (std:13.4-1.6 with 5.4) + + // "Overloaded 'h' ambiguous in this context" + f(static_cast<void(*)(double)>(h)); // should work (std:13.4-1.6 with 5.2.9) +} +</pre> + +<strong>Workaround:</strong> Always use C-style casts when determining +addresses of (potentially) overloaded functions. + +<h3>[string conversion] Converting <code>const char *</code> to +<code>std::string</code></h3> + +Implicitly converting <code>const char *</code> parameters to +<code>std::string</code> arguments fails if template functions are +explicitly instantiated (it works in the usual cases, though): + +<pre> +#include <string> + +template<class T> +void f(const std::string & s) +{} + +int main() +{ + f<double>("hello"); // "Could not find a match for f<T>(char *)" +} + +</pre> + +<strong>Workaround:</strong> Avoid explicit template function +instantiations (they have significant problems with Microsoft Visual +C++) and pass default-constructed unused dummy arguments with the +appropriate type. Alternatively, if you wish to keep to the explicit +instantiation, you could use an explicit conversion to +<code>std::string</code> or declare the template function as taking a +<code>const char *</code> parameter. + + +<h3>[template value defaults] Dependent default arguments for template +value parameters</h3> + +Template value parameters which default to an expression dependent on +previous template parameters don't work: + +<pre> +template<class T> +struct A +{ + static const bool value = true; +}; + +// "Templates must be classes or functions", "Declaration syntax error" +template<class T, bool v = A<T>::value> +struct B {}; + +int main() +{ + B<int> x; +} + +</pre> + + +<strong>Workaround:</strong> If the relevant non-type template +parameter is an implementation detail, use inheritance and a fully +qualified identifier (for example, ::N::A<T>::value). + + +<h3>[function partial ordering] Partial ordering of function +templates</h3> + +Partial ordering of function templates, as described in std:14.5.5.2 +[temp.func.order], does not work: + +<pre> +#include <iostream> + +template<class T> struct A {}; + +template<class T1> +void f(const A<T1> &) +{ + std::cout << "f(const A<T1>&)\n"; +} + +template<class T> +void f(T) +{ + std::cout << "f(T)\n"; +} + +int main() +{ + A<double> a; + f(a); // output: f(T) (wrong) + f(1); // output: f(T) (correct) +} +</pre> + +<strong>Workaround:</strong> Declare all such functions uniformly as +either taking a value or a reference parameter. + + +<h2>Library</h2> + + +<h3>[cmath.abs] Function <code>double std::abs(double)</code> +missing</h3> + +The function <code>double std::abs(double)</code> should be defined +(std:26.5-5 [lib.c.math]), but it is not: + +<pre> +#include <cmath> + +int main() +{ + double (*p)(double) = std::abs; // error +} +</pre> + +Note that <code>int std::abs(int)</code> will be used without warning +if you write <code>std::abs(5.1)</code>. +<p> +Similar remarks apply to seemingly all of the other standard math +functions, where Borland C++ fails to provide <code>float</code> and +<code>long double</code> overloads. +<p> +<strong>Workaround:</strong> Use <code>std::fabs</code> instead if +type genericity is not required. + +<h2>Appendix: Additional issues with Borland C++ version 5.5</h2> + +These issues are documented mainly for historic reasons. If you are +still using Borland C++ version 5.5, you are strongly encouraged to +obtain an upgrade to version 5.5.1, which fixes the issues described +in this section. + +<h3>[inline friend] Inline friend functions in template classes</h3> + +If a friend function of some class has not been declared before the +friend function declaration, the function is declared at the namespace +scope surrounding the class definition. Together with class templates +and inline definitions of friend functions, the code in the following +fragment should declare (and define) a non-template function "bool +N::f(int,int)", which is a friend of class N::A<int>. However, +Borland C++ v5.5 expects the function f to be declared beforehand: + +<pre> +namespace N { +template<class T> +class A +{ + // "f is not a member of 'N' in function main()" + friend bool f(T x, T y) { return x < y; } +}; +} + +int main() +{ + N::A<int> a; +} +</pre> + +This technique is extensively used in boost/operators.hpp. Giving in +to the wish of the compiler doesn't work in this case, because then +the "instantiate one template, get lots of helper functions at +namespace scope" approach doesn't work anymore. Defining +BOOST_NO_OPERATORS_IN_NAMESPACE (a define +BOOST_NO_INLINE_FRIENDS_IN_CLASS_TEMPLATES would match this case +better) works around this problem and leads to another one, see +[using-template]. + +<p> + +<hr> + +2000-09-30 <a href="../people/jens_maurer.htm">Jens Maurer</a> +</body> +</html> diff --git a/more/count_bdy.htm b/more/count_bdy.htm new file mode 100644 index 0000000000..0dd6f0bc79 --- /dev/null +++ b/more/count_bdy.htm @@ -0,0 +1,1166 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> + +<HTML> + +<HEAD> + + <TITLE>Counted Body Techniques</TITLE> + + <META NAME="GENERATOR" CONTENT="Microsoft FrontPage 4.0"> + + <META NAME="Author" CONTENT="Kevlin Henney"> + + <META NAME="KeyWords" CONTENT="C++, Reference Counting, Advanced Techniques, Smart Pointers, Patterns"> + +</HEAD> + +<BODY bgcolor="#FFFFFF" text="#000000"> + + + +<H1 ALIGN=CENTER><I><FONT SIZE=+4>Counted Body Techniques</FONT></I></H1> + + + +<CENTER><P><B><FONT SIZE=+1><a href="../people/kevlin_henney.htm">Kevlin Henney</a><BR> + +</FONT>(<A HREF="mailto:kevlin@acm.org">kevlin@acm.org</A>, <a HREF="mailto:khenney@qatraining.com">khenney@qatraining.com</a>)</B></P></CENTER> + + + +<UL> + +<P>Reference counting techniques? Nothing new, you might think. Every good + +C++ text that takes you to an intermediate or advanced level will introduce + +the concept. It has been explored with such thoroughness in the past that + +you might be forgiven for thinking that everything that can be said has + +been said. Well, let's start from first principles and see if we can unearth + +something new....</P> + +</UL> + + + + +<HR WIDTH="100%"> +<H2>And then there were none...</H2> + + +<UL> + +<P>The principle behind reference counting is to keep a running usage count + +of an object so that when it falls to zero we know the object is unused. + +This is normally used to simplify the memory management for dynamically + +allocated objects: keep a count of the number of references held to that + +object and, on zero, delete the object.</P> + + + +<P>How to keep a track of the number of users of an object? Well, normal + +pointers are quite dumb, and so an extra level of indirection is required + +to manage the count. This is essentially the P<FONT SIZE=-1>ROXY</FONT> + +pattern described in <I>Design Patterns</I> [Gamma, Helm, Johnson & + +Vlissides, Addison-Wesley, <FONT SIZE=-1>ISBN </FONT>0-201-63361-2]. The + +intent is given as</P> + + + +<UL> + +<P><I>Provide a surrogate or placeholder for another object to control + +access to it.</I></P> + +</UL> + + + +<P>Coplien [<I>Advanced C++ Programming Styles and Idioms</I>, Addison-Wesley, + +<FONT SIZE=-1>ISBN </FONT>0-201-56365-7] defines a set of idioms related + +to this essential separation of a handle and a body part. The <I>Taligent + +Guide to Designing Programs </I>[Addison-Wesley, <FONT SIZE=-1>ISBN </FONT>0-201-40888-0] + +identifies a number of specific categories for proxies (aka surrogates). + +Broadly speaking they fall into two general categories:</P> + + + +<UL> + +<LI><I>Hidden</I>: The handle is the object of interest, hiding the body + +itself. The functionality of the handle is obtained by delegation to the + +body, and the user of the handle is unaware of the body. Reference counted + +strings offer a transparent optimisation. The body is shared between copies + +of a string until such a time as a change is needed, at which point a copy + +is made. Such a C<FONT SIZE=-1>OPY</FONT> <FONT SIZE=-1>ON</FONT> W<FONT SIZE=-1>RITE</FONT> + +pattern (a specialisation of L<FONT SIZE=-1>AZY</FONT> E<FONT SIZE=-1>VALUATION</FONT>) + +requires the use of a hidden reference counted body.</LI> + + + +<LI><I>Explicit</I>: Here the body is of interest and the handle merely + +provides intelligence for its access and housekeeping. In C++ this is often + +implemented as the S<FONT SIZE=-1>MART</FONT> P<FONT SIZE=-1>OINTER</FONT> + +idiom. One such application is that of reference counted smart pointers + +that collaborate to keep a count of an object, deleting it when the count + +falls to zero.</LI> + +</UL> + +</UL> + + + + +<HR WIDTH="100%"> +<H2>Attached vs detached</H2> + + +<UL> + +<P>For reference counted smart pointers there are two places the count + +can exist, resulting in two different patterns, both outlined in <I>Software + +Patterns</I> [Coplien, SIGS, <FONT SIZE=-1>ISBN </FONT>0-884842-50-X]:</P> + + + +<UL> + +<LI>C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> or A<FONT SIZE=-1>TTACHED</FONT> + +C<FONT SIZE=-1>OUNTED</FONT> H<FONT SIZE=-1>ANDLE</FONT>/B<FONT SIZE=-1>ODY</FONT> + +places the count within the object being counted. The benefits are that + +countability is a part of the object being counted, and that reference + +counting does not require an additional object. The drawbacks are clearly + +that this is intrusive, and that the space for the reference count is wasted + +when the object is not heap based. Therefore the reference counting ties + +you to a particular implementation and style of use.</LI> + + + +<LI>D<FONT SIZE=-1>ETACHED</FONT> C<FONT SIZE=-1>OUNTED</FONT> H<FONT SIZE=-1>ANDLE</FONT>/B<FONT SIZE=-1>ODY</FONT> + +places the count outside the object being counted, such that they are handled + +together. The clear benefit of this is that this technique is completely + +unintrusive, with all of the intelligence and support apparatus in the + +smart pointer, and therefore can be used on classes created independently + +of the reference counted pointer. The main disadvantage is that frequent + +use of this can lead to a proliferation of small objects, i.e. the counter, + +being created on the heap.</LI> + +</UL> + + + +<P>Even with this simple analysis, it seems that the D<FONT SIZE=-1>ETACHED</FONT> + +C<FONT SIZE=-1>OUNTED</FONT> H<FONT SIZE=-1>ANDLE</FONT>/B<FONT SIZE=-1>ODY</FONT> + +approach is ahead. Indeed, with the increasing use of templates this is + +often the favourite, and is the principle behind the common - but not standard + +- <TT><FONT SIZE=+1>counted_ptr</FONT></TT>. +<I>[The Boost name is <a href="../libs/smart_ptr/shared_ptr.htm"><TT><FONT SIZE=+1>shared_ptr</FONT></TT></a> + +rather than <TT><FONT SIZE=+1>counted_ptr</FONT></TT>.]</I></P> + + + +<P>A common implementation of C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> + +is to provide the counting mechanism in a base class that the counted type + +is derived from. Either that, or the reference counting mechanism is provided + +anew for each class that needs it. Both of these approaches are unsatisfactory + +because they are quite closed, coupling a class into a particular framework. + +Added to this the non-cohesiveness of having the count lying dormant in + +a non-counted object, and you get the feeling that excepting its use in + +widespread object models such as COM and CORBA the C<FONT SIZE=-1>OUNTED</FONT> + +B<FONT SIZE=-1>ODY</FONT> approach is perhaps only of use in specialised + +situations.</P> + +</UL> + + + +<HR WIDTH="100%"> +<H2>A requirements based approach</H2> + + +<UL> + +<P>It is the question of openness that convinced me to revisit the problems + +with the C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> idiom. + +Yes, there is a certain degree of intrusion expected when using this idiom, + +but is there anyway to minimise this and decouple the choice of counting + +mechanism from the smart pointer type used?</P> + + + +<P>In recent years the most instructive body of code and specification + +for constructing open general purpose components has been the Stepanov + +and Lee's STL (Standard Template Library), now part of the C++ standard + +library. The STL approach makes extensive use of compile time polymorphism + +based on well defined operational requirements for types. For instance, + +each container, contained and iterator type is defined by the operations + +that should be performable on an object of that type, often with annotations + +describing additional constraints. Compile time polymorphism, as its name + +suggests, resolves functions at compile time based on function name and + +argument usage, i.e. overloading. This is less intrusive, although less + +easily diagnosed if incorrect, than runtime poymorphism that is based on + +types, names and function signatures.</P> + + + +<P>This requirements based approach can be applied to reference counting. + +The operations we need for a type to be <I>Countable</I> are loosely:</P> + + + +<UL> + +<LI>An <TT><FONT SIZE=+1>acquire</FONT></TT> operation that registers interest + +in a <I>Countable </I>object.</LI> + + + +<LI>A <TT><FONT SIZE=+1>release</FONT></TT> operation unregisters interest + +in a <I>Countable </I>object.</LI> + + + +<LI>An <TT><FONT SIZE=+1>acquired</FONT></TT> query that returns whether + +or not a <I>Countable </I>object is currently acquired.</LI> + + + +<LI>A <TT><FONT SIZE=+1>dispose</FONT></TT> operation that is responsible + +for disposing of an object that is no longer acquired.</LI> + +</UL> + + + +<P>Note that the count is deduced as a part of the abstract state of this + +type, and is not mentioned or defined in any other way. The openness of + +this approach derives in part from the use of global functions, meaning + +that no particular member functions are implied; a perfect way to wrap + +up an existing counted body class without modifying the class itself. The + +other aspect to the openness comes from a more precise specification of + +the operations.</P> + + + +<P>For a type to be <I>Countable</I> it must satisfy the following requirements, + +where <TT><FONT SIZE=+1>ptr</FONT></TT> is a non-null pointer to a single + +object (i.e. not an array) of the type, and <I><TT><FONT SIZE=+1>#function</FONT></TT></I> + +indicates number of calls to <TT><FONT SIZE=+1><I>function(</I>ptr<I>)</I></FONT></TT>:</P> + + + +<CENTER><TABLE BORDER=1 CELLSPACING=2 CELLPADDING=2 > + +<TR> + +<TD><I>Expression</I></TD> + + + +<TD><I>Return type</I></TD> + + + +<TD><I>Semantics and notes</I></TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>acquire(ptr)</FONT></TT></TD> + + + +<TD>no requirement</TD> + + + +<TD><I>post</I>: <TT><FONT SIZE=+1>acquired(ptr)</FONT></TT></TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>release(ptr)</FONT></TT></TD> + + + +<TD>no requirement</TD> + + + +<TD><I>pre</I>: <TT><FONT SIZE=+1>acquired(ptr)<BR> + +</FONT></TT><I>post</I>: <TT><FONT SIZE=+1>acquired(ptr) == #acquire - + +#release</FONT></TT></TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>acquired(ptr)</FONT></TT></TD> + + + +<TD>convertible to <TT><FONT SIZE=+1>bool</FONT></TT></TD> + + + +<TD><I>return</I>: <TT><FONT SIZE=+1>#acquire > #release</FONT></TT></TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>dispose(ptr, ptr)</FONT></TT></TD> + + + +<TD>no requirement</TD> + + + +<TD><I>pre</I>: <TT><FONT SIZE=+1>!acquired(ptr)<BR> + +</FONT></TT><I>post</I>: <TT><FONT SIZE=+1>*ptr</FONT></TT> no longer usable</TD> + +</TR> + +</TABLE></CENTER> + + + +<P>Note that the two arguments to <TT><FONT SIZE=+1>dispose</FONT></TT> + +are to support selection of the appropriate type safe version of the function + +to be called. In the general case the intent is that the first argument + +determines the type to be deleted, and would typically be templated, while + +the second selects which template to use, e.g. by conforming to a specific + +base class.</P> + + + +<P>In addition the following requirements must also be satisfied, where + +<TT><FONT SIZE=+1>null</FONT></TT> is a null pointer to the <I>Countable</I> + +type:</P> + + + +<CENTER><TABLE BORDER=1 > + +<TR> + +<TD><I>Expression</I></TD> + + + +<TD><I>Return type</I></TD> + + + +<TD><I>Semantics and notes</I></TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>acquire(null)</FONT></TT></TD> + + + +<TD>no requirement</TD> + + + +<TD><I>action</I>: none</TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>release(null)</FONT></TT></TD> + + + +<TD>no requirement</TD> + + + +<TD><I>action</I>: none</TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>acquired(null)</FONT></TT></TD> + + + +<TD>convertible to <TT><FONT SIZE=+1>bool</FONT></TT></TD> + + + +<TD><I>return</I>: <TT><FONT SIZE=+1>false</FONT></TT></TD> + +</TR> + + + +<TR> + +<TD><TT><FONT SIZE=+1>dispose(null, null)</FONT></TT></TD> + + + +<TD>no requirement</TD> + + + +<TD><I>action</I>: none</TD> + +</TR> + +</TABLE></CENTER> + + + +<P>Note that there are no requirements on these functions in terms of exceptions + +thrown or not thrown, except that if exceptions are thrown the functions + +themselves should be exception safe.</P> + +</UL> + + + +<HR WIDTH="100%"> +<H2>Getting smart</H2> + + +<UL> + +<P>Given the <I>Countable</I> requirements for a type, it is possible to + +define a generic smart pointer type that uses them for reference counting:</P> + + + +<UL> +<PRE><TT>template<typename countable_type> +class countable_ptr +{ +public: // construction and destruction + + explicit countable_ptr(countable_type *); + countable_ptr(const countable_ptr &); + ~countable_ptr(); + +public: // access + + countable_type *operator->() const; + countable_type &operator*() const; + countable_type *get() const; + +public: // modification + + countable_ptr &clear(); + countable_ptr &assign(countable_type *); + countable_ptr &assign(const countable_ptr &); + countable_ptr &operator=(const countable_ptr &); + +private: // representation + + countable_type *body; + +}; +</TT></PRE> + +</UL> + + + +<P>The interface to this class has been kept intentionally simple, e.g. + +member templates and <TT><FONT SIZE=+1>throw</FONT></TT> specs have been + +omitted, for exposition. The majority of the functions are quite simple + +in implementation, relying very much on the <TT><FONT SIZE=+1>assign</FONT></TT> + +member as a keystone function:</P> + + + +<UL> + +<PRE><TT>template<typename countable_type> +countable_ptr<countable_type>::countable_ptr(countable_type *initial) + : body(initial) +{ + acquire(body); +} + +template<typename countable_type> +countable_ptr<countable_type>::countable_ptr(const countable_ptr &other) + : body(other.body) +{ + acquire(body); +} + +template<typename countable_type> +countable_ptr<countable_type>::~countable_ptr() +{ + clear(); +} + +template<typename countable_type> +countable_type *countable_ptr<countable_type>::operator->() const +{ + return body; +} + +template<typename countable_type> +countable_type &countable_ptr<countable_type>::operator*() const +{ + return *body; +} + +template<typename countable_type> +countable_type *countable_ptr<countable_type>::get() const +{ + return body; +} + +template<typename countable_type> +countable_ptr<countable_type> &countable_ptr<countable_type>::clear() +{ + return assign(0); +} + +template<typename countable_type> +countable_ptr<countable_type> &countable_ptr<countable_type>::assign(countable_type *rhs) +{ + // set to rhs (uses Copy Before Release idiom which is self assignment safe) + acquire(rhs); + countable_type *old_body = body; + body = rhs; + + // tidy up + release(old_body); + if(!acquired(old_body)) + { + dispose(old_body, old_body); + } + + return *this; +} + +template<typename countable_type> +countable_ptr<countable_type> &countable_ptr<countable_type>::assign(const countable_ptr &rhs) +{ + return assign(rhs.body); +} + +template<typename countable_type> +countable_ptr<countable_type> &countable_ptr<countable_type>::operator=(const countable_ptr &rhs) +{ + return assign(rhs); +} +</TT></PRE> + +</UL> + +</UL> + + + +<HR WIDTH="100%"> +<H2>Public accountability</H2> + + +<UL> + +<P>Conformance to the requirements means that a type can be used with <TT><FONT SIZE=+1>countable_ptr</FONT></TT>. + +Here is an implementation mix-in class (<I>mix-imp</I>) that confers countability + +on its derived classes through member functions. This class can be used + +as a class adaptor:</P> + + + +<UL> + +<PRE><TT>class countability +{ +public: // manipulation + + void acquire() const; + void release() const; + size_t acquired() const; + +protected: // construction and destruction + + countability(); + ~countability(); + +private: // representation + + mutable size_t count; + +private: // prevention + + countability(const countability &); + countability &operator=(const countability &); + +}; +</TT></PRE> + +</UL> + + + +<P>Notice that the manipulation functions are <TT><FONT SIZE=+1>const</FONT></TT> + +and that the <TT><FONT SIZE=+1>count</FONT></TT> member itself is <TT><FONT SIZE=+1>mutable</FONT></TT>. + +This is because countability is not a part of an object's abstract state: + +memory management does not depend on the <TT><FONT SIZE=+1>const</FONT></TT>-ness + +or otherwise of an object. I won't include the definitions of the member + +functions here as you can probably guess them: increment, decrement and + +return the current count, respectively for the manipulation functions. + +In a multithreaded environment you should ensure that such read and write + +operations are atomic.</P> + + + +<P>So how do we make this class <I>Countable</I>? A simple set of forwarding + +functions does the job:</P> + + + +<UL> + +<PRE><TT>void acquire(const countability *ptr) +{ + if(ptr) + { + ptr->acquire(); + } +} + +void release(const countability *ptr) +{ + if(ptr) + { + ptr->release(); + } +} + +size_t acquired(const countability *ptr) +{ + return ptr ? ptr->acquired() : 0; +} + +template<class countability_derived> +void dispose(const countability_derived *ptr, const countability *) +{ + delete ptr; +} +</TT></PRE> + +</UL> + + + +<P>Any type that now derives from <TT><FONT SIZE=+1>countability</FONT></TT> + +may now be used with <TT><FONT SIZE=+1>countable_ptr</FONT></TT>:</P> + + + +<UL> + +<PRE><TT>class example : public countability +{ + ... +}; + +void simple() +{ + countable_ptr<example> ptr(new example); + countable_ptr<example> qtr(ptr); + ptr.clear(); // set ptr to point to null +} // allocated object deleted when qtr destructs +</TT></PRE> +</UL> +</UL> + + + + +<HR WIDTH="100%"> +<H2>Runtime mixin</H2> + + +<UL> + +<P>The challenge is to apply C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> + +in a non-intrusive fashion, such that there is no overhead when an object + +is not counted. What we would like to do is confer this capability on a + +per object rather than on a per class basis. Effectively we are after <I>Countability + +</I>on any object, i.e. anything pointed to by a <TT><FONT SIZE=+1>void + +*</FONT></TT>! It goes without saying that <TT><FONT SIZE=+1>void</FONT></TT> + +is perhaps the least committed of any type.</P> + + + +<P>The forces to resolve on this are quite interesting, to say the least. + +Interesting, but not insurmountable. Given that the class of a runtime + +object cannot change dynamically in any well defined manner, and the layout + +of the object must be fixed, we have to find a new place and time to add + +the counting state. The fact that this must be added only on heap creation + +suggests the following solution:</P> + + + +<UL> + +<PRE><TT>struct countable_new; +extern const countable_new countable; + +void *operator new(size_t, const countable_new &); +void operator delete(void *, const countable_new &);</TT></PRE> +</UL> + + + +<P>We have overloaded <TT><FONT SIZE=+1>operator new</FONT></TT> with a + +dummy argument to distinguish it from the regular global <TT><FONT SIZE=+1>operator + +new</FONT></TT>. This is comparable to the use of the <TT><FONT SIZE=+1>std::nothrow_t</FONT></TT> + +type and <TT><FONT SIZE=+1>std::nothrow</FONT></TT> object in the standard + +library. The placement <TT><FONT SIZE=+1>operator delete</FONT></TT> is + +there to perform any tidy up in the event of failed construction. Note + +that this is not yet supported on all that many compilers.</P> + + + +<P>The result of a <TT><FONT SIZE=+1>new</FONT></TT> expression using <TT><FONT SIZE=+1>countable</FONT></TT> + +is an object allocated on the heap that has a header block that holds the + +count, i.e. we have extended the object by prefixing it. We can provide + +a couple of features in an anonymous namespace (not shown) in the implementation + +file for for supporting the count and its access from a raw pointer:</P> + + + +<UL> + +<PRE><TT>struct count +{ + size_t value; +}; + +count *header(const void *ptr) +{ + return const_cast<count *>(static_cast<const count *>(ptr) - 1); +} +</TT></PRE> + +</UL> + + + +<P>An important constraint to observe here is the alignment of <TT><FONT SIZE=+1>count</FONT></TT> + +should be such that it is suitably aligned for any type. For the definition + +shown this will be the case on almost all platforms. However, you may need + +to add a padding member for those that don't, e.g. using an anonymous <TT><FONT SIZE=+1>union</FONT></TT> + +to coalign <TT><FONT SIZE=+1>count</FONT></TT> and the most aligned type. + +Unfortunately, there is no portable way of specifying this such that the + +minimum alignment is also observed - this is a common problem when specifying + +your own allocators that do not directly use the results of either <TT><FONT SIZE=+1>new</FONT></TT> + +or <TT><FONT SIZE=+1>malloc</FONT></TT>.</P> + + + +<P>Again, note that the count is not considered to be a part of the logical + +state of the object, and hence the conversion from <TT><FONT SIZE=+1>const</FONT></TT> + +to non-<TT><FONT SIZE=+1>const</FONT></TT> - <TT><FONT SIZE=+1>count</FONT></TT> + +is in effect a <TT><FONT SIZE=+1>mutable</FONT></TT> type.</P> + + + +<P>The allocator functions themselves are fairly straightforward:</P> + + + +<UL> + +<PRE><TT>void *operator new(size_t size, const countable_new &) +{ + count *allocated = static_cast<count *>(::operator new(sizeof(count) + size)); + *allocated = count(); // initialise the header + return allocated + 1; // adjust result to point to the body +} + +void operator delete(void *ptr, const countable_new &) +{ + ::operator delete(header(ptr)); +} +</TT></PRE> + +</UL> + + + +<P>Given a correctly allocated header, we now need the <I>Countable </I>functions + +to operate on <TT><FONT SIZE=+1>const void *</FONT></TT> to complete the + +picture:</P> + + + +<UL> + +<PRE><TT>void acquire(const void *ptr) +{ + if(ptr) + { + ++header(ptr)->value; + } +} + +void release(const void *ptr) +{ + if(ptr) + { + --header(ptr)->value; + } +} + +size_t acquired(const void *ptr) +{ + return ptr ? header(ptr)->value : 0; +} + +template<typename countable_type> +void dispose(const countable_type *ptr, const void *) +{ + ptr->~countable_type(); + operator delete(const_cast<countable_type *>(ptr), countable); +} +</TT></PRE> + +</UL> + + + +<P>The most complex of these is the <TT><FONT SIZE=+1>dispose</FONT></TT> + +function that must ensure that the correct type is destructed and also + +that the memory is collected from the correct offset. It uses the value + +and type of first argument to perform this correctly, and the second argument + +merely acts as a strategy selector, i.e. the use of <TT><FONT SIZE=+1>const + +void *</FONT></TT> distinguishes it from the earlier dispose shown for + +<TT><FONT SIZE=+1>const countability *</FONT></TT>.</P> + +</UL> + + + + +<HR WIDTH="100%"> +<H2>Getting smarter</H2> + + + +<UL> + +<P>Now that we have a way of adding countability at creation for objects + +of any type, what extra is needed to make this work with the <TT><FONT SIZE=+1>countable_ptr</FONT></TT> + +we defined earlier? Good news: nothing!</P> + + + +<UL> + +<PRE><TT>class example +{ + ... +}; + +void simple() +{ + countable_ptr<example> ptr(new(countable) example); + countable_ptr<example> qtr(ptr); + ptr.clear(); // set ptr to point to null +} // allocated object deleted when qtr destructs +</TT></PRE> + +</UL> + + + +<P>The <TT><FONT SIZE=+1>new(countable)</FONT></TT> expression defines + +a different policy for allocation and deallocation and, in common with + +other allocators, any attempt to mix your allocation policies, e.g. call + +<TT><FONT SIZE=+1>delete</FONT></TT> on an object allocated with <TT><FONT SIZE=+1>new(countable)</FONT></TT>, + +results in undefined behaviour. This is similar to what happens when you + +mix <TT><FONT SIZE=+1>new[]</FONT></TT> with <TT><FONT SIZE=+1>delete</FONT></TT> + +or <TT><FONT SIZE=+1>malloc</FONT></TT> with <TT><FONT SIZE=+1>delete</FONT></TT>. + +The whole point of <I>Countable </I>conformance is that <I>Countable </I>objects + +are used with <TT><FONT SIZE=+1>countable_ptr</FONT></TT>, and this ensures + +the correct use.</P> + + + +<P>However, accidents will happen, and inevitably you may forget to allocate + +using <TT><FONT SIZE=+1>new(countable)</FONT></TT> and instead use <TT><FONT SIZE=+1>new</FONT></TT>. + +This error and others can be detected in most cases by extending the code + +shown here to add a check member to the <TT><FONT SIZE=+1>count</FONT></TT>, + +validating the check on every access. A benefit of ensuring clear separation + +between header and implementation source files means that you can introduce + +a checking version of this allocator without having to recompile your code.</P> + +</UL> + + + + +<HR WIDTH="100%"> +<H2>Conclusion</H2> + + + +<UL> + +<P>There are two key concepts that this article has introduced:</P> + + + +<UL> + +<LI>The use of a generic requirements based approach to simplify and adapt + +the use of the C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> pattern.</LI> + + + +<LI>The ability, through control of allocation, to dynamically and non-intrusively + +add capabilities to fixed types using the R<FONT SIZE=-1>UNTIME</FONT> + +M<FONT SIZE=-1>IXIN</FONT> pattern.</LI> + +</UL> + + + +<P>The application of the two together gives rise to a new variant of the + +essential C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> pattern, + +U<FONT SIZE=-1>NINTRUSIVE</FONT> C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT>. + +You can take this theme even further and contrive a simple garbage collection + +system for C++.</P> + + + +<P>The complete code for <TT><FONT SIZE=+1>countable_ptr</FONT></TT>, <TT><FONT SIZE=+1>countability</FONT></TT>, + +and the <TT><FONT SIZE=+1>countable new</FONT></TT> is also available.</P> + +</UL> + + + +<DIV ALIGN=right><P> + +<HR WIDTH="100%"><FONT SIZE=-1><I>First published in </I><a href="http://www.accu.org/c++sig/public/Overload.html">Overload</a> <I>25, + +April 1998, ISSN 1354-3172<BR> + +© Copyright Kevlin Henney, 1998, 1999</I></FONT></DIV> + + + +</BODY> + +</HTML> + diff --git a/more/discussion_policy.htm b/more/discussion_policy.htm new file mode 100644 index 0000000000..6047d6ad70 --- /dev/null +++ b/more/discussion_policy.htm @@ -0,0 +1,108 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Boost Discussion Policy</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people/people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>Boost Discussion Policy</h1> +<p>Email discussion is the tie that binds boost members together into a community. +If the discussion is stimulating and effective, the community thrives. If +the discussion degenerates into name calling and ill will, the community withers +and dies.</p> +<h2>Acceptable topics</h2> +<ul> + <li>Queries to determine interest in a possible library submission.</li> + <li>Technical discussions about a proposed or existing library, including bug + reports and requests for help.</li> + <li>Formal Reviews of proposed libraries.</li> + <li>Reports of user experiences with Boost libraries.</li> + <li>Boost administration or policies.</li> + <li>Compiler specific workarounds as applied to Boost libraries.</li> +</ul> +<p>Other topics related to boost development may be acceptable, at the discretion of moderators. If unsure, go ahead and post. The moderators +will let you know.</p> +<h2>Unacceptable topics</h2> +<ul> + <li>Advertisements for commercial products.</li> + <li>Requests for help getting non-boost code to compile with your compiler. + Try the comp.lang.c++.moderated newsgroup instead.</li> + <li>Requests for help interpreting the C++ standard. Try the comp.std.c++ + newsgroup instead.</li> +</ul> +<h2>Prohibited behavior</h2> +<p>Prohibited behavior will not be tolerated. The moderators will ban +postings by abusers.</p> +<h3>Flame wars</h3> +<p>Personal insults, argument for the sake of argument, and all the other +behaviors which fall into the "flame war" category are +prohibited. Discussions should focus on technical arguments, not the +personality traits or motives of participants.</p> +<h3>Third-party attacks</h3> +<p>Attacks on third parties such as software vendors, hardware vendors, or any +other organizations, are prohibited. Boost exists to unite and serve the +entire C++ community, not to disparage the work of others.</p> +<p>Does this mean that we ban the occasional complaint or wry remark about a +troublesome compiler? No, but be wary of overdoing it.</p> +<h3>Off-topic posts</h3> +<p>Discussions which stray from the acceptable topics are strongly discouraged. +While off-topic posts are often well meaning and not as individually corrosive +as other abuses, cumulatively the distraction damages the effectiveness of +discussion.</p> +<h2>Culture</h2> +<p>In addition to technical skills, Boost members value collaboration, +acknowledgement of the help of others, and a certain level of politeness. Boost +membership is very international, and ranges widely in age and other +characteristics. Think of discussion as occurring among colleagues in a widely read forum, rather +than among a few close friends.</p> +<h2>Guidelines for effective discussions</h2> +<p>Apply social engineering to prevent heated technical discussion from +degenerating into a shouting match.</p> +<ul> + <li>Questions help. If someone suggests something that you don't think + will work, then replying with a question like "will that compile?" + or "won't that fail to compile, or am I missing something?" is a + lot smoother than "That's really stupid - it won't compile." + Saying "that fails to compile for me, and seems to violate section + n.n.n of the standard" would be yet another way to be firm without + being abrasive.</li> + <li>If most of the discussion has been code-free generalities, posting a bit + of sample code can focus people on the practical issues.</li> + <li>If most of the discussion has been in terms of specific code, try to talk + a bit about hidden assumptions and generalities that may be preventing + discussion closure.</li> + <li>Taking a time-out is often effective. Just say: "Let me think + about that for a day or two. Let's take a time-out to digest the + discussion so far."</li> +</ul> +<p>Avoid Parkinson's Bicycle Shed. Parkinson described a committee formed +to oversee design of an early nuclear power plant. There were three agenda +items - when to have tea, where to put the bicycle shed, and how to +ensure nuclear safety. Tea was was disposed of quickly as trivial. +Nuclear safety was discussed for only +an hour - it was so complex, scary, and technical that even +among experts few felt comfortable with the issues. Endless days were then +spent discussing where to put the bicycle shed (the parking lot would +be a modern equivalent) because everyone +understood the issues and felt comfortable discussing them. </p> +<hr> +<p>Revised <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->08 January, 2001<!--webbot bot="Timestamp" endspan i-checksum="38324" --> +</p> + +</body> + +</html> diff --git a/more/faq.htm b/more/faq.htm new file mode 100644 index 0000000000..cf88065b01 --- /dev/null +++ b/more/faq.htm @@ -0,0 +1,134 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>FAQ</title> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="Microsoft Border" content="none, default"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" WIDTH="277" + HEIGHT="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td> + <td><a href="../people/people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td> + </tr> +</table> + +<h1>Frequently Asked Questions</h1> + +<p><b>How is a library accepted for posting on the site?</b> An initial review by the +library master filters out libraries which do not meet the absolute requirements (must be +C++, ownership clear, reasonable format, etc.) The author is free to rework and +resubmit libraries which do not pass initial muster. This is encouraged, particularly when +reviewers like the idea behind a library but feel that details are lacking.</p> + +<p><b>Is there any assurance libraries actually work as claimed?</b> No. The review +process will hopefully eliminate the most seriously flawed libraries, but a well +constructed library with hidden defects is likely to slip through. Encouraging ordinary +users to report their experience with a library is intended to address such concerns. </p> + +<p><b>How does someone submit a comment?</b> Send email to <a +href="mailto:boost@egroups.com">boost@egroups.com</a>. </p> + +<p><strong>How does someone submit a library?</strong> See <a href="lib_guide.htm">Library +Guidelines</a></p> + +<p><b>Are commercial libraries requiring a fee acceptable?</b> No. However, a library that +a commercial enterprise makes available without fee is acceptable. If the description of +the library makes a low-key plug for the supplier, that is acceptable as long as the +library delivers real value and isn’t just a Trojan horse for the plug.</p> + +<p><b>Are shareware libraries acceptable?</b> No. At least initially, only free libraries +will be accepted.</p> + +<p><strong>Are open source license libraries acceptable?</strong> Some +are, many are not. +Open source licenses often require redistribution or availability of source code, +inclusion of license document with machine-executable redistribution, give the initial +developer rights to licensee modifications, or need a lawyer to understand. These +would be immediate disqualifications for many business, commercial, and consumer +applications. Boost aims to avoid subjecting users to hard-to-comply-with license +terms. See <a href="lib_guide.htm##License">License requirements</a>.<br> +<br> +This is subject to review for a particularly important piece of software, or as the +industry changes.</p> + +<p><b>Must full source code be provided?</b> Yes, these are source code libraries.</p> + +<p><b>What about documentation?</b> A very simple library might be accepted with only a +well commented header file. For more substantial libraries, some form of documentation is +certainly going to be expected. HTML is the preferred form.</p> + +<p><b>Are platform specific libraries acceptable?</b> There is a preference for portable +libraries. Libraries will be accepted that have portable interfaces but require platform +specific implementations, as long as the author supplies implementations for a couple of +disparate major operating systems.</p> + +<p><b>Must a library do useful work? </b>No. A library meant as a teaching example or +demonstration might not actually do any work.</p> + +<p><b>Who owns the libraries?</b> Presumably many authors will copyright their libraries. +Others authors may wish to place their libraries in the public domain. The Boost.org +policy is to only accept libraries with a clear copyright notice. It is up to +potential users to decide if they find the copyright terms acceptable, and to not use +libraries with unacceptable copyrights.</p> + +<p><b>What support is available for the libraries?</b> Try the <a +href="mailto:boost@egroups.com">boost@egroups.com</a> mailing list. </p> + +<p><b>Is there a formal relationship between Boost.org and the C++ Standards Committee?</b> + No. The people who started Boost.org were all on the committee, but that was just +happenstance.</p> + +<p><b>Will the Boost.org libraries become part of the next C++ Standard?</b> Some +might, someday off in the future, but that is up to the standards committee. To the +extent a library becomes "existing practice", the likelihood increases that +someone will propose it for future standardization. Submitting a library to Boost.org is +one way to establish existing practice - as long as enough people are interested to +download and use it!</p> + +<p><b>Is the web site a commercial business?</b> No. It is just some people getting together +as a kind of cyberspace civic association. If it ever needs to incorporate, it would be as +non-profit organization.</p> + +<p><b>Is there any charge for submitting libraries or reviews to Boost.org?</b> No. Unlike +the standards committees, you don’t have to pay to volunteer!</p> + +<p><b>Will the site include material beyond libraries?</b> The main focus is on libraries, +but if people contribute occasional articles or other material to make the site more +interesting, that could be a nice fit.</p> + +<p><strong>How do I download the libraries?</strong> + See <a href="../libs/libraries.htm#Download">Download</a> instructions.</p> + +<p><b>Why isn't there a separate boost mailing list for my favorite +library? </b> One of the reasons for boost's success has been the cross-pollination of ideas between diverse library +projects and the occasional look into other threads by otherwise uninterested parties. The more people participate, the less they tend to be annoyed by +"noise".</p> + +<p><b>How can I cope with the large volume of boost mailing list messages?</b> +One approach is to use the eGroups digest option; that cuts the email blizzard +down to about three (long) messages per day, so you can glance over the subjects +summary at the top and quickly read what you think is important. The +eGroups "no mail/web only" option is best if you just occasionally +want to look at messages.</p> + +<p>Yet another approach is to use your email program's capabilities to filter messages and automatically +transfer them into several boost folders. Then only read the folders you +care about. Boost list posters are +encouraged to include keywords in the subject like "thread", +"review", and "CVS" to aid message filtering.</p> + +<hr> + +<p>Revised <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->08 December, 2000<!--webbot bot="Timestamp" endspan i-checksum="38516" --> +</p> +</body> +</html> diff --git a/more/feature_model_diagrams.htm b/more/feature_model_diagrams.htm new file mode 100644 index 0000000000..f18d7bd7dd --- /dev/null +++ b/more/feature_model_diagrams.htm @@ -0,0 +1,104 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Feature Model Diagrams</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<p><img border="0" src="../c++boost.gif" width="277" height="86"></p> +<h1>Feature Model Diagrams in text and HTML</h1> +<p>By <a href="../people/beman_dawes.html">Beman Dawes</a></p> +<h2>Introduction</h2> +<p>In their seminal book, Generative Programming, Czarnecki and Eisenecker (<a href="#Generative Programming">C&E</a>) +describe how to build feature models [C&E 4.4] consisting of a feature +diagram plus semantic, rationale, and other attributes. Feature models are +then used to drive design cycles which eventually lead to manual or automatic +assembly of configurations.</p> +<p>Feature models provide a language to describe the library variability that is +often such an issue in boost.org discussions. The Whorf hypothesis that +"Language shapes the way we think, and determines what we can think +about" seems to apply. In discussion of library variability issues, +we have been crippled by lack of a good language. With feature models we now +have a language to carry on the dialog.</p> +<p>The graphical feature diagrams presented by C&E are not in a suitable +form for the email discussions boost.org depends upon. The hierarchical nature +of feature diagrams can be represented by a simple text-based feature diagram +language. A feature model can also take advantage of the hyperlinks +inherent in HTML.</p> +<h2><a name="Grammar">Grammar</a></h2> +<p>The grammar for the feature diagram language is expressed in Extended +Bakus-Naur Form; ::= represents productions, [...] represents options, {...} +represents zero or more instances, and represents | alternatives.</p> +<blockquote> + <pre>feature-model ::= concept-name details { feature }</pre> + <pre>feature ::= feature-name [details]</pre> + <pre>details ::= "(" feature-list ")" // required features + | "[" feature-list "]" // optional features</pre> + <pre>feature-list ::= element { "|" element } // one only + | element { "+" element } // one or more + | element { "," element } // all + // [a+b] equivalent to [a,b]</pre> + <pre>element ::= feature + | details</pre> + <pre>concept-name ::= name</pre> + <pre>feature-name ::= name</pre> +</blockquote> +<p>The usual lexical conventions apply. Names are case-insensitive and consist +of a leading letter, followed by letters, digits, underscores or hyphens, with +no spaces allowed.</p> +<p>At least one instance of each name should be hyperlinked to the corresponding +<a href="#Feature Descriptions">Feature Description</a>.</p> +<p>While the grammar is intended for written communication between people, it +may also be trivially machine parsed for use by automatic tools.</p> +<h2><a name="Feature Descriptions">Feature Description</a></h2> +<p>Descriptive information is associated with each concept or feature. According +to [C&E 4.4.2] this includes:</p> +<ul> + <li>Semantic descriptions.</li> + <li>Rationale.</li> + <li>Stakeholders and client programs.</li> + <li>Exemplar systems.</li> + <li>Constraints and default dependency rules.</li> + <li>Availability sites, binding sites, and binding mode.</li> + <li>Open/Closed attribute.</li> +</ul> +<h2>What is a Feature?</h2> +<p>A feature [C&E 4.9.1] is "anything users or client programs might +want to control about a concept. Thus, during feature modeling, we +document no only functional features ... but also implementation features, ..., +various optimizations, alternative implementation techniques, and so on."</p> +<h2>Example</h2> +<blockquote> + <pre>special-container ( organization, + performance, + interface ) // all required</pre> + <pre>organization [ ordered + indexed ] // zero or more (4 configurations)</pre> + <pre>indexed [ hash-function ] // zero or one (2 configurations)</pre> + <pre>performance ( fast | small | balanced ) // exactly one (3 configurations)</pre> + <pre>interface ( STL-style + cursor-style ) // one or more (3 configurations)</pre> +</blockquote> +<p>There should be feature descriptions for <code>some-container, organization, +ordered, indexed, hash-function, performance, fast, small, balanced, interface, +STL-style, and cursor-style</code>.</p> +<p>The number of possible configurations is (2 + 2*2) * 3 * 3 = 54, +assuming no constraints.</p> +<p>There are equivalent representations. For example:</p> +<blockquote> + <pre>special-container ( organization[ ordered+indexed[ hash-function ]], + performance( fast|small|balanced ), + interface( STL-style+cursor-style ) )</pre> +</blockquote> +<h2>References</h2> +<p>Krzysztof Czarnecki and Ulrich W. Eisenecker, <a name="Generative Programming" href="http://www.generative-programming.org">Generative +Programming</a>, Addison-Wesley, 2000, ISBN 0-210-30977-7</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B %Y" startspan -->27 September 2000<!--webbot bot="Timestamp" endspan i-checksum="39501" --></p> +<p>© Copyright Beman Dawes, 2000</p> + +</body> + +</html> diff --git a/more/formal_review_process.htm b/more/formal_review_process.htm new file mode 100644 index 0000000000..9e1b7ecd5f --- /dev/null +++ b/more/formal_review_process.htm @@ -0,0 +1,115 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Formal Review Process</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people/people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>Formal Review Process</h1> +<p>The Formal Review process determines if a proposed library should be accepted +as a Boost library.</p> +<p>The final "accept" or "reject" decision is made by the <a href="#Review Manager"> +Review Manager</a>, based on review comments received from boost mailing list +members.</p> +<p>Reviews are scheduled so that:</p> +<ul> + <li>Each library gets review time proportional to its size, complexity, and + importance.</li> + <li>Only a small number of libraries are under active review at any one time.</li> + <li>Members know ahead of time when a particular library will be under active + review. </li> +</ul> +<h2>Comments</h2> +<p> Boost mailing list members are encouraged to submit Formal Review +comments:</p> +<blockquote> + <ul> + <li>Publicly on the mailing list.</li> + <li>Privately to the Review Manager. (See Formal Review Status page )</li> + <li>Privately to the library submitter.</li> + </ul> +</blockquote> +<p>Private comments to a library submitter may be helpful to her or him, but +won't help the Review Manager reach a decision, so the other forms are +preferred.</p> +<h2>Preparing review comments</h2> +<p>Comments may be brief or lengthy, but basically the Review Manager needs your +answers to several questions. If you identify problems along the way, +please note if they are minor, serious, or showstoppers.</p> +<ul> + <li>What is your evaluation of the design?<br> + </li> + <li>What is your evaluation of the implementation?<br> + </li> + <li>What is your evaluation of the documentation?<br> + </li> + <li>What is your evaluation of the potential usefulness of the library?<br> + </li> + <li>Did you try to use the library? With what compiler? Did you + have any problems?<br> + </li> + <li>How much effort did you put into your evaluation? A glance? A quick + reading? In-depth study?<br> + </li> + <li>Are you knowledgeable about the problem domain?<br> + </li> + <li>Finally, do you think the library should be accepted as a Boost + library? Be sure to say this explicitly so that your other comments + don't obscure your overall opinion.</li> +</ul> +<h2>Results</h2> +<p>At the conclusion of the comment period, the Review Manager will post a +message to the mailing list saying if the library has been accepted or +rejected. A rationale should be provided, but its extent is up to the +Review Manager.</p> +<h2>Notes for <a name="Review Manager"> Review Manager</a>s</h2> +<p>Before a library can be scheduled for formal review, an active boost member not +connected with the library submission must volunteer to be the "Review +Manager" for the library.</p> +<p>The review manager:</p> +<ul> + <li>Sets the schedule, after discussion with the boost webmaster, currently + Beman Dawes. </li> + <li>Posts a notice of the review schedule.</li> + <li>Urges people to do reviews if they aren't forthcoming.</li> + <li>Follows review discussions regarding the library, moderating or answering + questions as needed.</li> + <li>Decides if +there is consensus to accept the library, and if there are any conditions + attached.</li> + <li>Posts a message informing members of the review results.</li> +</ul> +<p>In other words, it is the Review Manager's responsibility to make sure the +review process stays on track.</p> +<h2>Notes for Library Authors</h2> +<p>A proposed library should remain stable during the review period; it will just +confuse and irritate reviewers if there are numerous changes. It +is, however, useful to upload fixes for serious bugs right away, particularly +those which prevent reviewers from fully evaluating the library. Post a +notice of such fixes on the mailing list.</p> +<p>Library improvements suggested by reviewers should be held until after the +completion of review period. Such changes can then be incorporated in the <a href="submission_process.htm#Final">final +submission file</a> sent to the webmaster for posting. If the suggested +changes might affect reviewer's judgments, post a notice of the pending +change on the mailing list.</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->10 November, 2000<!--webbot bot="Timestamp" endspan i-checksum="39349" --></p> +<p> </p> + +</body> + +</html> diff --git a/more/header.htm b/more/header.htm new file mode 100644 index 0000000000..813a2c93e4 --- /dev/null +++ b/more/header.htm @@ -0,0 +1,93 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Header policy</title> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<meta name="Microsoft Border" content="none, default"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people/people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>Header Policy</h1> +<p>Header files are the place where a library comes into contact with user code +and other libraries. To co-exist peacefully and productively, headers must +be "good neighbors".</p> +<p>Here are the standards for namespace boost headers. Many of +these are also reasonable guidelines for general use. +<ul> + <li>Headers should have a .hpp (lowercase) filename extension. </li> + <li>Wrap the header in #ifndef guards so that multiple inclusion is + benign. Use a naming convention that minimizes the chance of clashes + with macro names from other's code. The <a href="#Sample header">sample + header</a> uses the Boost convention of all uppercase letters, with the + header name prefixed by the namespace name, and suffixed with HPP, separated + by underscores.</li> + <li>Wrap the header contents in a namespace to prevent global namespace + pollution. The namespace approach to pollution control is strongly preferred + to older approaches such as adding funny prefixes to global names. + Libraries which are designed to work well with other Boost libraries should + be placed namespace <tt>boost</tt>.</li> + <li>Place the header file in a sub-directory to prevent conflict with + identically named header files in other libraries. The parent + directory is added to the compiler's include search path. Then both + your code and user code specifies the sub-directory in <tt>#include</tt> + directives. Thus the header <a href="#Sample header">sample header</a> + would be included by <tt>#include <boost/furball.hpp></tt></li> + <li>The preferred ordering for class definitions is public members, protected + members, and finally private members.</li> + <li>Include the boost/config.hpp <a href="../libs/config/index.htm">configuration + header</a> if there is a need to deal with compiler or platform + configuration issues.</li> +</ul> +<h2><a name="Sample header"></a>Sample Header</h2> +<pre><tt>// Boost general library furball.hpp header file ---------------------------// + +// (C) Copyright Your Name 1998. Permission to copy, use, modify, sell and +// distribute this software is granted provided this copyright notice appears +// in all copies. This software is provided "as is" without express or implied +// warranty, and with no claim as to its suitability for any purpose. + +// See http://www.boost.org for updates, documentation, and revision history. + +#ifndef BOOST_FURBALL_HPP +#define BOOST_FURBALL_HPP + +namespace boost { + +// Furball class declaration -----------------------------------------------// + + class furball + { + public: + void throw_up(); + private: + int whatever; + }; // furball + +} // namespace + +#endif // BOOST_FURBALL_HPP</tt></pre> +<h2>Coding Style</h2> +<p>The alert reader will have noticed that the <a href="#Sample header">sample +header</a> employs a certain coding style for indentation, positioning braces, +commenting ending braces, and similar formatting issues. These stylistic +issues are viewed as personal preferences and are not part of the Boost Header +Policy.</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->10 November, 2000<!--webbot bot="Timestamp" endspan i-checksum="39349" --></p> + +</body> + +</html> diff --git a/more/imp_vars.htm b/more/imp_vars.htm new file mode 100644 index 0000000000..9428ff3679 --- /dev/null +++ b/more/imp_vars.htm @@ -0,0 +1,201 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Implementation Variations</title> +</head> + +<body link="#0000ff" vlink="#800080" bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people/people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>Implementation Variations</h1> +<h2>Separation of interface and implementation</h2> +<p>The interface specifications for boost.org library components (as well as for +quality software in general) are conceptually separate from implementations of +those interfaces. This may not be obvious, particularly when a component is +implemented entirely within a header, but this separation of interface and +implementation is always assumed. From the perspective of those concerned with +software design, portability, and standardization, the interface is what is +important, while the implementation is just a detail.</p> +<p>Dietmar Kühl, one of the original boost.org contributors, comments "The +main contribution is the interface, which is augmented with an implementation, +proving that it is possible to implement the corresponding class and providing a +free implementation."</p> +<b> +<h2>Implementation variations</h2> +</b> +<p>There may be a need for multiple implementations of an interface, to +accommodate either platform dependencies or performance tradeoffs. Examples of +platform dependencies include compiler shortcomings, file systems, thread +mechanisms, and graphical user interfaces. The classic example of a performance +tradeoff is a fast implementation which uses a lot of memory versus a slower +implementation which uses less memory.</p> +<p>Boost libraries generally use a <a href="../libs/config/index.htm">configuration +header</a>, boost/config.hpp, to capture compiler and platform +dependencies. Although the use of boost/config.hpp is not required, it is +the preferred approach for simple configuration problems. </p> +<h2>Boost policy</h2> +<p>The Boost policy is to avoid platform dependent variations in interface +specifications, but supply implementations which are usable over a wide range of +platforms and applications. That means boost libraries will use the +techniques below described as appropriate for dealing with platform +dependencies.</p> +<p>The Boost policy toward implementation variations designed to enhance +performance is to avoid them unless the benefits greatly exceed the full +costs. The term "full costs" is intended to include both +tangible costs like extra maintenance, and intangible cost like increased +difficulty in user understanding.</p> +<b> +<h2>Techniques for providing implementation variations</h2> +</b> +<p>Several techniques may be used to provide implementation variations. Each is +appropriate in some situations, and not appropriate in other situations.</p> +<h3>Single general purpose implementation</h3> +<p>The first technique is to simply not provide implementation variation at +all. Instead, provide a single general purpose implementation, and forgo +the increased complexity implied by all other techniques.</p> +<p><b>Appropriate:</b> When it is possible to write a single portable +implementation which has reasonable performance across a wide range of +platforms. Particularly appropriate when alternative implementations differ only +in esoteric ways.</p> +<p><b>Not appropriate:</b> When implementation requires platform specific +features, or when there are multiple implementation possible with widely +differing performance characteristics.</p> +<p>Beman Dawes comments "In design discussions some implementation is often +alleged to be much faster than another, yet a timing test discovers no +significant difference. The lesson is that while algorithmic differences may +affect speed dramatically, coding differences such as changing a class from +virtual to non-virtual members or removing a level of indirection are unlikely +to make any measurable difference unless deep in an inner loop. And even in an +inner loop, modern CPU’s often execute such competing code sequences in the +same number of clock cycles! A single general purpose implementation is +often just fine."</p> +<p>Or as Donald Knuth said, "Premature optimization is the root of all +evil." (Computing Surveys, vol 6, #4, p 268).</p> +<h3>Macros</h3> +<p>While the evils of macros are well known, there remain a few cases where +macros are the preferred solution:</p> +<blockquote> + <ul> + <li> Preventing multiple inclusion of headers via #include guards.</li> + <li> Passing minor configuration information from a configuration + header to other files.</li> + </ul> +</blockquote> +<p><b>Appropriate:</b> For small compile-time variations which would +otherwise be costly or confusing to install, use, or maintain. More appropriate +to communicate within and between library components than to communicate with +library users.</p> +<p><b>Not appropriate: </b> If other techniques will do.</p> +<p>To minimize the negative aspects of macros:</p> +<blockquote> + <ul> + <li>Only use macros when they are clearly superior to other + techniques. They should be viewed as a last resort.</li> + <li>Names should be all uppercase, and begin with the namespace name. This + will minimize the chance of name collisions. For example, the #include + guard for a boost header called foobar.h might be named BOOST_FOOBAR_H.</li> + </ul> +</blockquote> +<h3>Separate files</h3> +<p>A library component can have multiple variations, each contained in its own +separate file or files. The files for the most appropriate variation are +copied to the appropriate include or implementation directories at installation +time.</p> +<p>The way to provide this approach in boost libraries is to include specialized +implementations as separate files in separate sub-directories in the .ZIP +distribution file. For example, the structure within the .ZIP distribution file +for a library named foobar which has both default and specialized variations +might look something like:</p> +<blockquote> + <pre>foobar.h // The default header file +foobar.cpp // The default implementation file +readme.txt // Readme explains when to use which files +self_contained/foobar.h // A variation with everything in the header +linux/foobar.cpp // Implementation file to replace the default +win32/foobar.h // Header file to replace the default +win32/foobar.cpp // Implementation file to replace the default</pre> +</blockquote> +<p><b>Appropriate:</b> When different platforms require different +implementations, or when there are major performance differences between +possible implementations. </p> +<p><b>Not appropriate:</b> When it makes sense to use more that one of the +variations in the same installation.</p> +<h3>Separate components</h3> +<p>Rather than have several implementation variations of a single component, +supply several separate components. For example, the Boost library currently +supplies <code>scoped_ptr</code> and <code>shared_ptr</code> classes rather than +a single <code>smart_ptr</code> class parameterized to distinguish between the +two cases. There are several ways to make the component choice:</p> +<blockquote> + <ul> + <li>Hardwired by the programmer during coding.</li> + <li>Chosen by programmer written runtime logic (trading off some extra + space, time, and program complexity for the ability to select the + implementation at run-time.)</li> + </ul> +</blockquote> +<p><b>Appropriate: </b>When the interfaces for the variations diverge, and when +it is reasonably to use more than one of the variations. When run-time selection +of implementation is called for.</p> +<p><b>Not appropriate:</b> When the variations are data type, traits, or +specialization variations which can be better handled by making the component a +template. Also not appropriate when choice of variation is best done by some +setup or installation mechanism outside of the program itself. Thus +usually not appropriate to cope with platform differences.</p> +<p><b>Note:</b> There is a related technique where the interface is specified as +an abstract (pure virtual) base class (or an interface definition language), and +the implementation choice is passed off to some third-party, such as a +dynamic-link library or object-request broker. While that is a powerful +technique, it is way beyond the scope of this discussion.</p> +<h3>Template-based approaches</h3> +<p>Turning a class or function into a template is often an elegant way to cope +with variations. Template-based approaches provide optimal space and time +efficiency in return for constraining the implementation selection to compile +time. </p> +<p>Important template techniques include:</p> +<blockquote> + <ul> + <li>Data type parameterization. This allows a single component to + operate on a variety of data types, and is why templates were originally + invented.</li> + <li>Traits parameterization. If parameterization is complex, bundling + up aspects into a single traits helper class can allow great variation + while hiding messy details. The C++ Standard Library provides + several examples of this idiom, such as <code>iterator_traits<></code> + (24.3.1 lib.iterator.traits) and <tt>char_traits<></tt> (21.2 + lib.char.traits).</li> + <li>Specialization. A template parameter can be used purely for the + purpose of selecting a specialization. For example:</li> + </ul> + <blockquote> + <blockquote> + <pre>SomeClass<fast> my_fast_object; // fast and small are empty classes +SomeClass<small> my_small_object; // used just to select specialization</pre> + </blockquote> + </blockquote> +</blockquote> +<p><b>Appropriate: </b>When the need for variation is due to data type or +traits, or is performance related like selecting among several algorithms, and +when a program might reasonably use more than one of the variations.</p> +<p><b>Not appropriate:</b> When the interfaces for variations are +different, or when choice of variation is best done by some mechanism outside of +the program itself. Thus usually not appropriate to cope with platform +differences.</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->10 November, 2000<!--webbot bot="Timestamp" endspan i-checksum="39349" --></p> + +</body> + +</html> diff --git a/more/index.htm b/more/index.htm new file mode 100644 index 0000000000..4151a6deb8 --- /dev/null +++ b/more/index.htm @@ -0,0 +1,77 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>More Information</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people/people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>More Information</h1> +<h2>Boost Policies</h2> +<blockquote> + <p><b><a href="discussion_policy.htm">Mailing List Discussion Policy.</a></b> + What's acceptable and what isn't.</p> + <p><b><a href="lib_guide.htm">Library Requirements and Guidelines</a></b>. + Basic standards for those preparing a submission.</p> + <p><a href="submission_process.htm"><b>Library Submission Process</b></a>. + How to submit a library to Boost.</p> + <p><b><a href="formal_review_process.htm">Library Formal Review Process</a></b>. + Including how to submit a review comment.</p> + <p><b><a href="header.htm">Header Policy</a></b>. Headers are where a + library contacts its users, so programming practices are particularly + important.</p> + <p><b><a href="imp_vars.htm">Implementation Variations</a></b>. + Sometimes one size fits all, sometimes it doesn't. This page deals with + the trade-offs.</p> + <p><b><a href="library_reuse.htm">Library Reuse</a></b>. Should Boost + libraries use other boost libraries? What about the C++ Standard + Library? It's another trade-off.</p> +</blockquote> + <h2>Boost Whatever</h2> +<blockquote> + <p> <a href="../libs/compiler_status.htm"><b>Compiler Status</b></a> + Describes what +library works with which compiler.</p> +<p> <a href="../libs/hdr_depend.html"><b>Header Dependencies</b></a> +Describes what +other headers each boost header includes.</p> +</blockquote> +<h2>Articles and Papers</h2> +<blockquote> + <p><b><a href="count_bdy.htm">Counted Body Techniques</a></b> by <a href="../people/kevlin_henney.htm">Kevlin + Henney</a> is must reading for those interested in reference counting, a + widely used object management idiom. Originally published in <a href="http://www.accu.org/c++sig/public/Overload.html">Overload</a> + magazine.</p> + <p><b><a href="feature_model_diagrams.htm">Feature Model Diagrams in text and + HTML</a></b> describes how to represent feature model diagrams in text form.</p> + <p><b><a href="borland_cpp.html">Portability Hints: Borland C++ 5.5.1</a></b> + describes Borland C++ portability issues, with suggested workarounds.</p> +</blockquote> +<h2>Links</h2> +<blockquote> + <p>The C++ Standard (ISO/IEC 14882) is available online as a PDF file from the + <a href="http://www.ansi.org">ANSI</a> (American National Standards Institute) + Electronic Standards Store. The price is $US 18.00. The document is + certainly not a tutorial, but is interesting to those who care about the + precise specification of the language and the standard library.</p> +</blockquote> + <p> </p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->26 December, 2000<!--webbot bot="Timestamp" endspan i-checksum="38514" --></p> + +</body> + +</html> diff --git a/more/lib_guide.htm b/more/lib_guide.htm new file mode 100644 index 0000000000..f1fb014d4e --- /dev/null +++ b/more/lib_guide.htm @@ -0,0 +1,340 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Library Requirements and Guidelines</title> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<meta name="Microsoft Border" content="none, default"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people/people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1 align="left">Boost Library Requirements and Guidelines</h1> +<p align="left">This page describes requirements and guidelines for the content +of a library submitted to Boost.</p> +<p align="left">See the <a href="submission_process.htm">Boost Library +Submission Process</a> page for a description of the process involved.</p> +<h2 align="left">Requirements</h2> +<p>To avoid the frustration and wasted time of a proposed library being +rejected, it must meets these requirements:</p> +<ul> + <li>The license must meet the <a href="#License">license requirements</a> + below. Restricted licenses like the GPL and LGPL are not acceptable. + </li> + <li>The + copyright <a href="#Ownership">ownership</a> must be clear. + </li> + <li>The library must be generally useful and not restricted to a narrow + problem domain. + </li> + <li>The library must meet the <a href="#Portability">portability requirements</a> + below. + </li> + <li>The library must come reasonably close to meeting the <a href="#Guidelines">Guidelines</a> + below. + <ul> + <li><a href="#Design and Programming">Design and Programming</a></li> + <li><a href="#Directory structure">Directory Structure</a></li> + <li><a href="#Documentation">Documentation</a></li> + </ul> + </li> + <li>The author must be willing to participate in discussions on the mailing + list, and to refine the library accordingly.</li> +</ul> +<p>There's no requirement that an author read the mailing list for a time before +making a submission. It has been noted, however, that submissions which begin +"I just started to read this mailing list ..." seem to fail, often +embarrassingly.</p> +<h3 align="left"><a name="License">License</a> requirements</h3> +<ul> + <li>Must be simple to read and understand. + </li> + <li>Must grant permission to copy, use and modify the software for any use + (commercial and non-commercial) for no fee. + </li> + <li>Must require that the license appear on all copies of the software source + code. + </li> + <li>Must not require that the license appear with executables or other binary + uses of the library. + </li> + <li>Must not require that the source code be + available for execution or other binary uses of the library. + </li> + <li>May restrict the use of the name and description of the library to the + standard version found on the Boost web site.</li> +</ul> +<h3 align="left"><a name="Portability">Portability</a> requirements</h3> +<ul> + <li> + <p align="left">A library's interface must portable and not restricted to a + particular compiler or operating system. + </li> + <li> + <p align="left">A library's implementation must if possible be portable and + not restricted to a particular compiler or operating system. If a + portable implementation is not possible, non-portable constructions are + acceptable if reasonably easy to port to other environments. + </li> + <li> + <p align="left">There is no requirement that a library run on C++ compilers + which do not conform to the ISO standard. + </li> + <li> + <p align="left">There is no requirement that a library run on any particular + C++ compiler. Boost contributors often try to ensure their libraries + work with popular compilers. The boost/config.hpp <a href="../libs/config/index.htm">configuration + header</a> is the preferred mechanism for working around compiler + deficiencies.</li> +</ul> +<p align="left">Since there is no absolute way to prove portability, many boost +submissions demonstrate practical portability by compiling and executing +correctly with two different C++ compilers, often under different operating +systems. Otherwise reviewers may disbelieve that porting is in fact +practical.</p> +<h3 align="left"><a name="Ownership">Ownership</a></h3> +<p align="left">Are you sure you own the library you are thinking of +submitting? "How to Copyright Software" by MJ Salone, Nolo +Press, 1990 says:</p> +<blockquote> + <p align="left">Doing work on your own time that is very similar to + programming you do for your employer on company time can raise nasty legal + problems. In this situation, it's best to get a written release from + your employer in advance.</p> +</blockquote> +<p align="left">Place a copyright notice in all the important files you submit. +Boost.org won't accept libraries without clear copyright information.</p> +<h2 align="left"><a name="Guidelines">Guidelines</a></h2> +<p align="left">Please use these guidelines as a checklist for preparing the +content a library submission. Not every guideline applies to every +library, but a reasonable effort to comply is expected.</p> +<h3><a name="Design and Programming">Design and Programming</a></h3> +<ul> + <li>Aim for ISO Standard C++. Than means making effective use of the standard + features of the language, and avoiding non-standard compiler extensions. It + also means using the C++ Standard Library where applicable.</li> +</ul> +<ul> + <li>Headers should be good neighbors. See the <a href="header.htm">header + policy</a>.</li> +</ul> +<ul> + <li>Follow quality programming practices. See, for example, "Effective + C++" 2nd Edition, and "More Effective C++", both by Scott + Meyers, published by Addison Wesley.</li> +</ul> +<ul> + <li>Use the C++ Standard Library or other Boost libraries, but only when the + benefits outweigh the costs. Do not use libraries other than the C++ + Standard Library or Boost. See <a href="library_reuse.htm">Library reuse</a>.</li> +</ul> +<ul> + <li>Read <a href="imp_vars.htm">Implementation Variation</a> to see how to + supply performance, platform, or other implementation variations.</li> +</ul> +<ul> + <li>Use the lowercase/underscore <a href="#Naming">naming conventions</a> of + the C++ standard library. Template parameter names begin with an + uppercase letter. Macro (gasp!) names should be all uppercase and begin with + BOOST_.</li> +</ul> +<ul> + <li>Use exceptions to report errors where appropriate, and write code that is + safe in the face of exceptions.</li> +</ul> +<ul> + <li>Avoid exception-specifications. See <a href="#Exception-specification">exception-specification + rationale</a>.</li> +</ul> +<ul> + <li>Provide sample programs, confidence tests, or regression tests so + potential users can see how to use your library and verify that it has + compiled correctly.</li> +</ul> +<ul> + <li>Although some boost members use proportional fonts, tabs, and unrestricted + line lengths in their own code, boost's widely distributed source code + should follow more conservative guidelines: + <ul> + <li>Use fixed-width fonts. See <a href="#code fonts">fonts rationale</a>.</li> + <li>Use spaces rather than tabs.</li> + <li>Limit line lengths to 80 characters.</li> + </ul> + </li> +</ul> +<ul> + <li>Begin all source files with: + <ul> + <li>A comment line describing the contents of the file.</li> + <li>Comments describing copyright and licensing.</li> + <li>A comment line referencing the Boost home page in the form:<br> + <code>// See http://www.boost.org for updates, documentation, and + revision history.</code><br> + [Including revision history in source files is no longer recommended; + the publicly available CVS repository better serves that purpose.]</li> + </ul> + </li> +</ul> +<h3><a name="Directory structure">Directory Structure</a></h3> +<ul> + <li>All libraries have at their highest level a primary directory named for + the particular library. The primary directory may have sub-directories.</li> + <li>For very simple libraries implemented entirely within the library header, + all files go in the primary directory (except headers, which go in the boost + header directory).</li> +</ul> +<blockquote> + <p><b>Boost standard sub-directory names</b></p> + <table border="1" cellpadding="5"> + <tr> + <td><b>Sub-directory</b></td> + <td><b>Contents</b></td> + <td><b>Required</b></td> + </tr> + <tr> + <td><code>build</code></td> + <td>Library build files such as make files or IDE project files.</td> + <td>If any build files.</td> + </tr> + <tr> + <td>doc</td> + <td>Documentation (HTML) files.</td> + <td>If several doc files.</td> + </tr> + <tr> + <td><code>example</code></td> + <td>Sample program files.</td> + <td>If several sample files.</td> + </tr> + <tr> + <td><code>src</code></td> + <td>Source files which must be compiled to build the library. </td> + <td>If any source files.</td> + </tr> + <tr> + <td><code>test</code></td> + <td>Regression or other test programs or scripts.</td> + <td>If several test files.</td> + </tr> + </table> +</blockquote> +<h3><a name="Documentation">Documentation</a></h3> +<p>Even the simplest library needs some documentation; the amount should be +proportional to the need. The documentation should assume the readers have +a basic knowledge of C++, but are not necessarily experts.</p> +<p>The format for documentation should be HTML, and should not require an +advanced browser or server-side extensions.</p> +<p>There is no single right way to do documentation. HTML documentation is often +organized quite differently from traditional printed documents. Task-oriented +styles differ from reference oriented styles. In the end, it comes down to the +question: Is the documentation sufficient for the mythical "average" +C++ programmer to use the library successfully?</p> +<p>Appropriate topics for documentation often include: +<ul> + <li>General introduction to the library.</li> + <li>Description of each class.</li> + <li>Relationship between classes.</li> + <li>For each function, as applicable, description, requirements + (preconditions), effects, post-conditions, returns, and throws.</li> + <li>Discussion of error detection and recovery strategy.</li> + <li>How to use including description of typical uses.</li> + <li>How to compile and link.</li> + <li>How to test.</li> + <li>Version or revision history.</li> + <li>Rationale for design decisions. See <a href="#Rationale">Rationale + rationale</a>.</li> + <li>Acknowledgements. See <a href="#Acknowledgements">Acknowledgments + rationale.</a></li> +</ul> +<h2>Rationale</h2> +<p>Rationale for some of the requirements and guidelines follows.</p> +<hr> +<h3><a name="Exception-specification">Exception-specification</a> rationale</h3> +<p>Exception specifications [ISO 15.4] are sometimes coded to indicate what +exceptions may be thrown, or because the programmer hopes they will improved +performance. But consider the follow member from a smart pointer:</p> +<pre> T& operator*() const throw() { return *ptr; }</pre> +<p>This function calls no other functions; it only manipulates fundamental data +types like pointers Therefore, no runtime behavior of the +exception-specification can ever be invoked. The function is completely +exposed to the compiler; indeed it is declared inline Therefore, a smart +compiler can easily deduce that the functions are incapable of throwing +exceptions, and make the same optimizations it would have made based on the +empty exception-specification. A "dumb" compiler, however, may make +all kinds of pessimizations.</p> +<p>For example, some compilers turn off inlining if there is an +exception-specification. Some compilers add try/catch blocks. Such +pessimizations can be a performance disaster which makes the code unusable in +practical applications.</p> +<p>Although initially appealing, an exception-specification tends to have +consequences that require <b>very</b> careful thought to understand. The biggest +problem with exception-specifications is that programmers use them as though +they have the effect the programmer would like, instead of the effect they +actually have.</p> +<p>A non-inline function is the one place a "throws nothing" +exception-specification may have some benefit with some compilers.</p> +<hr> +<h3><a name="Naming">Naming</a> conventions rationale</h3> +<p>The C++ standard committee's Library Working Group discussed this issue in +detail, and over a long period of time. The discussion was repeated again in +early boost postings. A short summary:</p> +<ul> + <li>Naming conventions are contentious, and although several are widely used, + no one style predominates.<br> + </li> + <li>Given the intent to propose portions of boost for the next revision of the + C++ standard library, boost decided to follow the standard library's + conventions.<br> + </li> + <li>Once a library settles on a particular convention, a vast majority of + stakeholders want that style to be consistently used.<br> + </li> + <li>There is a strong preference for clear and descriptive names, even if + lengthy.</li> +</ul> +<hr> +<h3>Source <a name="code fonts">code fonts</a> rationale</h3> +<p>Dave Abrahams comments: An important purpose (I daresay the primary purpose) +of source code is communication: the documentation of intent. This is a doubly +important goal for boost, I think. Using a fixed-width font allows us to +communicate with more people, in more ways (diagrams are possible) right there +in the source. Code written for fixed-width fonts using spaces will read +reasonably well when viewed with a variable-width font, and as far as I can tell +every editor supporting variable-width fonts also supports fixed width. I don't +think the converse is true.</p> +<hr> +<h3><a name="Rationale">Rationale</a> rationale</h3> +<p>Rationale is defined as "The fundamental reasons for something; +basis." by the American Heritage Dictionary.</p> +<p>Beman Dawes comments: Failure to supply contemporaneous rationale for +design decisions is a major defect in many software projects. Lack of accurate +rationale causes issues to revisited endlessly, causes maintenance bugs when a +maintainer changes something without realizing it was done a certain way for +some purpose, and shortens the useful lifetime of software.</p> +<p>Rationale is fairly easy to provide at the time decisions are made, but very +hard to accurately recover even a short time later.</p> +<hr> +<h3><a name="Acknowledgements">Acknowledgements</a> rationale</h3> +<p>As a library matures, it almost always accumulates improvements suggested to +the authors by other boost members. It is a part of the culture of +boost.org to acknowledge such contributions, identifying the person making the +suggestion. Major contributions are usually acknowledged in the +documentation, while minor fixes are often mentioned in comments within the code +itself.</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->08 December, 2000<!--webbot bot="Timestamp" endspan i-checksum="38516" --></p> + +</body> + +</html> diff --git a/more/library_reuse.htm b/more/library_reuse.htm new file mode 100644 index 0000000000..240c948a7b --- /dev/null +++ b/more/library_reuse.htm @@ -0,0 +1,72 @@ +<html> + +<head> +<meta http-equiv="Content-Language" content="en-us"> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Library Reuse</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people/people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> + +<h1>Library reuse: cost versus benefit trade-offs</h1> +<p>A Boost library <b>should not</b> use libraries other than Boost or the C++ +Standard Library.</p> +<p>A Boost library <b>should</b> use other Boost Libraries or the C++ Standard +Library, but only when the benefits outweigh the costs. </p> +<p>The benefits of using components from other libraries may include clearer, +more understandable code, reduced development and maintenance costs, and the +assurance which comes from reusing well-known and trusted building blocks.</p> +<p>The costs may include undesirable coupling between components, and added +compilation and runtime costs. If the interface to the additional +component is complex, using it may make code less readable, and thus actually +increase development and maintenance costs.</p> +<p>Negative effects of coupling become obvious when one library uses a second +library which uses a third, and so on. The worst form of coupling requires the +user understand each of the coupled libraries. Coupling may also reduce the +portability of a library - even in case when all used libraries are +self-sufficient (see example of questionable usage of <iostream> library +below).</p> +<p><b>Example where another boost component should certainly be used:</b> +boost::noncopyable (in <a href="../boost/utility.hpp">boost/utility.hpp</a>) has +considerable benefits; it simplifies code, improves readability, and signals +intent. Costs are low as coupling is limited; noncopyable itself +uses no other classes and its header includes only the lightweight headers +<boost/config.hpp> and <cstddef>. There are no runtime costs +at all. With costs so low and benefits so high, other boost libraries should use +boost::noncopyable when the need arises except in exceptional circumstances.</p> +<p><b>Example where a standard library component might possibly be used:</b> +Providing diagnostic output as a debugging aid can be a nice feature for a +library. Yet using Standard Library <iostream> can involves a lot of +additional cost, particularly if <iostream> is unlikely to be use +elsewhere in the application. In certain GUI or embedded applications, +coupling to <iostream> would be a disqualification. +Consider redesign of the boost library in question so that the user supplies the +diagnostic output mechanism.</p> +<p><b>Example where another boost component should not be used:</b> The +boost dir_it library has considerable coupling and runtime costs, not to mention +portability issues for unsupported operating systems. While completely +appropriate when directory iteration is required, it would not be reasonable for +another boost library to use dir_it just to check that a file is available +before opening. C++ Standard Library file open functionality does this at +lower cost. Don't use dir_it just for the sake of using a boost library.</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B %Y" startspan -->10 November 2000<!--webbot bot="Timestamp" endspan i-checksum="39429" --></p> +<p> </p> +<p> </p> + +</body> + +</html> diff --git a/more/submission_process.htm b/more/submission_process.htm new file mode 100644 index 0000000000..f440197232 --- /dev/null +++ b/more/submission_process.htm @@ -0,0 +1,156 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Library Submission Process</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="../people/people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>Boost Library Submission Process</h1> +<p>This page describes the process of getting a library accepted by Boost. +The process is still evolving, so if you have suggestions for improvement by all +means post them on the mailing list.</p> +<p>See the <a href="lib_guide.htm">Boost Library Requirements and Guidelines</a> +page for issues of content.</p> +<h3><b>Steps for getting a library accepted by Boost:</b></h3> +<ul> + <li><a href="#Learn">Learn about Boost</a>.</li> + <li><a href="#interest">Determine interest</a>.</li> + <li><a href="#Preliminary">Preliminary submission</a>.</li> + <li><a href="#Refinement">Refinement</a>.</li> + <li><a href="#Review">Formal Review</a>.</li> + <li><a href="#site posting">Web site posting</a>.</li> + <li><a href="#Lifecycle">Lifecycle</a>.</li> +</ul> +<h2><a name="Learn">Learn</a> about Boost</h2> +<p>Subscribe to the <a href="../index.htm#Mailing List">mailing list</a> for a +while, or look through the <a href="http://www.egroups.com/messages/boost">archives</a>. +Click around the <a href="../index.htm">web site</a>. Understand the <a href="lib_guide.htm">Requirements</a>. +Read the rest of this page to learn about the process. Otherwise, you will +just end up wasting everyone's time.</p> +<p>There is a culture associated with Boost, aimed at encouraging high quality +libraries by a process of discussion and refinement.</p> +<p>If what you really want is a site that will just post your library without +even looking at it, you should go elsewhere.</p> +<h2>Determine <a name="interest">interest</a></h2> +<p>Potential library submitters should use the <a href="../index.htm#Mailing List">mailing +list</a> as a forum to gauge interest a possible submission.</p> +<p>A message might be as simple as "Is there any interest in a library +which solves Traveling Salesperson problems in linear time?"</p> +<p>A bit of further description or snippet of code may be helpful. Messages +should be plain text; not rich text, HTML, etc.</p> +<p>Please don't post lengthy descriptions, documentation, or code to the mailing +list, and no attachments, even small ones. Please post lengthy material in +the eGroups boost <a href="http://www.egroups.com/files/boost/">Files section</a> +(formerly called the " vault"). </p> +<h2><a name="Preliminary">Preliminary</a> submission</h2> +<p>If response to an initial query indicates interest, then post preliminary +files in the <a href="http://www.egroups.com/files/boost/">Files section</a> of +the boost eGroups web site if you haven't already done so.</p> +<h2><a name="Refinement">Refinement</a></h2> +<p>Discuss, refine, resubmit. Repeat until satisfied.</p> +<p>The exact details of this process varies a lot. Sometimes it is public, +on the mailing list, sometimes a lot of discussion happens in private +emails. For some libraries the process is over quickly, for others it goes +on for months. It's often challenging, and sometimes leads off in +completely unexpected directions. </p> +<p>The <a href="http://www.egroups.com/messages/boost">archive</a> of past +messages is one way to see how this process worked for other boost +libraries. </p> +<h2>Formal <a name="Review">Review</a></h2> +<p>Once a library author feels a submission (which presumably is now in the +files/vault) has matured enough for formal review, the author sends a message +requesting a formal review to the mailing list. Please use a subject in +the form "Review Request: library" where <i>library</i> is replaced by +the library name.</p> +<p>See <a href="formal_review_process.htm">Formal Review Process</a> for +details.</p> +<p>Formal Review schedules are posted on the boost mailing list.. </p> +<h2>Boost <a name="site posting">site posting</a></h2> +<p>There are two ways that files are posted on the boost web site:</p> +<ul> + <li>Direct update of the boost CVS repository. This requires write + access, and is primarily used for larger libraries, or for libraries + maintained by very active boost developers.</li> + <li>Packaging all files into submission file, and emailing it to the boost + webmaster.</li> +</ul> +<p>The submission file approach is as follows:</p> +<h3>Packaging</h3> +<p>All of the files which make up the library should be combined and compressed +into a single final submission file using the .zip format. Free encoders +and decoders for this format running on many different platforms are available +at the <a href="http://www.info-zip.org/pub/infozip/">Info-ZIP</a> web site, which +includes a FAQ and much other useful information about the .zip format. Many +commercial compressor-archiver utilities also support this format.</p> +<h3><a name="Final">Final</a> Submission file</h3> +<p>The final submission file contains the material that will live on the +boost.org web site. The closer the submission file mirrors the directory +structure and format of the web site, the easier it is for the webmaster to +integrate it into the web site. +<p>The submission file for a library named <b>foo</b> should include these +subdirectories, with the contents indicated: +<blockquote> + <p><b>libs/foo</b> + <ul> + <li>An introductory page named index.html or index.htm which looks like the + initial page of other libraries. <a href="../libs/rational/index.html">Rational</a> + is a model for single part libraries, <a href="../libs/integer/index.htm">Integer</a> + is a model for + multi-part libraries.</li> + <li>The documentation page or pages, also in HTML format.</li> + <li>Source files implementing the library if it isn't entirely header + based. The boost file type convention for source files is <b>.cpp</b>.</li> + <li>Test programs and data files if supplied.</li> + <li>If the library has a large number of subsidiary files which aren't + linked to from the documentation pages, these subsidiary files can be + combined into a single .zip file.</li> + </ul> + <p><b>boost</b></p> + <ul> + <li>Public header files as described in the documentation for the + library. The boost file type convention for header files is <b>.hpp</b>.</li> + </ul> + <p><b>boost/detail</b></p> + <ul> + <li>Implementation header files not normally accessed by library users.</li> + </ul> +</blockquote> +<h3>Transmission</h3> +<p>Submit via email to <a href="mailto:webmaster@boost.org">webmaster@boost.org</a>. +Attach the .zip submission file. In the email message, please include your +email address, postal mail address, and telephone number, if boost.org doesn't +already have them. Your addresses and phone number will not appear on the web +site (unless you include them in your biography). Anonymous postings are +not accepted.</p> +<h3>People pages</h3> +<p>If the boost.org web site doesn't already have your capsule biography +and picture (optional, with not-too-serious pictures preferred), please +send them <a href="../index.htm#webmaster">mailto:webmaster@boost.org</a>. It is +up to you as to whether or not the biography includes your email address or +other contact information. The preferred picture format is .jpg, but other +common formats are acceptable. The preferred image size is 500x375 but the +webmaster has photo editing software and can do the image preparation if +necessary.</p> +<h2><a name="Lifecycle">Lifecycle</a></h2> +<p>Libraries are software; they loose their value over time if not +maintained. Details still hazy.</p> +<hr> +<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->10 November, 2000<!--webbot bot="Timestamp" endspan i-checksum="39349" --></p> + +</body> + +</html> diff --git a/more/use_other_libs.htm b/more/use_other_libs.htm new file mode 100644 index 0000000000..2aecadebb5 --- /dev/null +++ b/more/use_other_libs.htm @@ -0,0 +1,52 @@ +<html> + +<head> +<meta http-equiv="Content-Language" content="en-us"> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Use other Boost or C</title> +</head> + +<body> + +<ul> + <li>Use other Boost or C++ Standard Library components only when the benefits + outweigh the costs.</li> +</ul> +<p>(Details)</p> +<p>The benefits of using components from other libraries include clearer, more +understandable, code, reduced development and maintenance costs, and the +assurance which comes from using well-known and trusted building blocks.</p> +<p>The costs incurred may include added compilation and runtime costs, and +undesirable coupling between components. If the interface to the +additional component is complex, using it may make code less readable, and thus +actually increase development and maintenance costs.</p> +<p><b>Example where another boost component should be used:</b> +boost::noncopyable (in boost/utility.hpp) has considerable benefits; it +simplifies code, improves readability, and signals intent. Costs are low +as coupling is limited; it uses no other classes and includes only the +generally lightweight headers <boost/config.hpp> and <cstddef>. +There are no runtime costs at all. With costs so low and benefits so high, other +boost libraries should use boost::noncopyable except in exceptional +circumstances.</p> +<p><b>Example where a standard library component might be used:</b> Providing +diagnostic output as a debugging aid can be a nice feature for a library. Yet +using Standard Library iostreams for the purpose involves a lot of additional +coupling, if iostreams is otherwise unused, and may be a complete waste if the +library is used in a GUI or embedded application. It might be better to +redesign the boost library so that the user supplies the output mechanism, +avoiding marginal use of iostreams.</p> +<p><b>Example where another boost component should not be used:</b> The +boost dir_it library has considerable coupling and runtime costs, not to mention +portability issues with unsupported operating systems. While completely +appropriate when directory iteration is required, it would not be reasonable for +another boost library to use dir_it just to check that a file is available +before opening, since Standard Library file open functionality does this at +lower cost. Don't use dir_it just for the sake of using a boost library.</p> +<p> </p> +<p> </p> + +</body> + +</html> diff --git a/people/aleksey_gurtovoy.htm b/people/aleksey_gurtovoy.htm new file mode 100644 index 0000000000..c358cd841f --- /dev/null +++ b/people/aleksey_gurtovoy.htm @@ -0,0 +1,50 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Aleksey Gurtovoy</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="aleksey_gurtovoy.jpg"><img border="0" src="aleksey_gurtovoy_small.jpg" alt="aleksey_gurtovoy.jpg (12871 bytes)" align="left" hspace="10" vspace="5" width="100" height="120"></a></p> +<p>Aleksey Gurtovoy is just a one Russian guy from Siberia, who now lives and +works in the United States. He is a technical lead in a small software company <a href="http://www.meta-comm.com">MetaCommunications</a>, +a job and people which have taught him so much.</p> +<p>He was born in early 1977, has been in love with computers since 1989, and +still has a lot of (exciting) ideas for his "spare time" in the next +few years. The first computer he worked with was DEC PDP-11, and he still has a +kind of nostalgia about this amazing machine. He graduated with honors from +Krasnoyarsk Technical State University in 1998 with a Master Degree in Computer +Science.</p> +<p>While being acknowledged as a talented programmer, Aleksey tries to be a +better engineer than he is now and hopes that reading good books will help him +with that task. He reads a lot... One of his favorite books about his profession +is 'The Mythical Man-Month' by Frederic P. Brooks, Jr.</p> +<p>He has been working with C++ since 1993, he loves the language and wants to +be involved in its progress. Sometimes you can come across his articles in the <a href="news:comp.lang.c++.moderated">comp.lang.c++.moderated</a> +and <a href="news:comp.std.c++">comp.std.c++</a><a> newsgroups. The other +numerous things Aleksey is interested in include patterns, object-oriented +methodology and programming languages, organization of software development +process and tools & technologies which make programmer's life easier (e.g. +compilers).</p> +<p>He is not married, but he has in mind one great girl he hopes to be with +someday.</p> +<p>You can contact him by sending mail to </a><a href="mailto:alexy@meta-comm.com">alexy@meta-comm.com</a><a>.</p> +</a> + +</body> + +</html> diff --git a/people/aleksey_gurtovoy.jpg b/people/aleksey_gurtovoy.jpg Binary files differnew file mode 100644 index 0000000000..fd49271502 --- /dev/null +++ b/people/aleksey_gurtovoy.jpg diff --git a/people/aleksey_gurtovoy_small.jpg b/people/aleksey_gurtovoy_small.jpg Binary files differnew file mode 100644 index 0000000000..65157fc9bf --- /dev/null +++ b/people/aleksey_gurtovoy_small.jpg diff --git a/people/beman_dawes.html b/people/beman_dawes.html new file mode 100644 index 0000000000..3a24a54696 --- /dev/null +++ b/people/beman_dawes.html @@ -0,0 +1,37 @@ +<html> + +<head> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Beman Dawes</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="beman_dawes.jpg"><img src="beman_dawes_small.jpg" alt="beman_dawes.jpg (62536 bytes)" border="0" align="left" hspace="10" vspace="5" width="100" height="133"></a> +Beman Dawes is a software developer from Virginia in the United States and the +founder of boost.org.</p> +<p>He is the author of the StreetQuick® geographic atlas library used by +digital map publishers to help people get really, really, lost.</p> +<p>He wrote his first computer program 40 years ago, and does not mourn the +passing of <a href="http://www.mta.ca/~amiller/cs3711/ibm650/ibm650.htm">bi-quinary</a> +arithmetic.</p> +<p>Beman has been a voting member of the ANSI/ISO C++ Standards Committee since +1992, and chaired the Library Working Group for five years.</p> +<p>He enjoys travel, sailing, hiking, and biking. He is married, and he and his +wife have three cats.</p> +<p>Email: <a href="mailto:bdawes@acm.org">bdawes@acm.org</a></p> + +</body> + +</html> diff --git a/people/beman_dawes.jpg b/people/beman_dawes.jpg Binary files differnew file mode 100644 index 0000000000..0c871cf3ab --- /dev/null +++ b/people/beman_dawes.jpg diff --git a/people/beman_dawes_small.jpg b/people/beman_dawes_small.jpg Binary files differnew file mode 100644 index 0000000000..69db86240c --- /dev/null +++ b/people/beman_dawes_small.jpg diff --git a/people/darin_adler.htm b/people/darin_adler.htm new file mode 100644 index 0000000000..b2f7e4f86f --- /dev/null +++ b/people/darin_adler.htm @@ -0,0 +1,48 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Darin Adler</title> +</head> + +<body> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="darin_adler.jpg"><img border="0" src="darin_adler_small.jpg" alt="darin_adler.jpg (30416 bytes)" align="left" hspace="10" vspace="5" width="100" height="135"></a>Darin Adler has been programming computers since 1976. He loves to do it.</p> +<p>His first major professional experience was at <a href="http://apple.com">Apple +Computer</a>. In 1988 he led the team that rewrote the Macintosh Finder in C++. +Before that project was completed, he was shanghaied to be the technical lead +for the System 7 project (these days they would call it "Mac OS 7"). +The group he formed to help him do that, the Blue Meanies, is still a <a href="http://www.spies.com/~greg/bluemeanies.html">legend</a> +in the Apple community.</p> +<p>Since Apple, Darin has worked at <a href="http://www.generalmagic.com">General +Magic</a> as an architect of the <a href="http://www.google.com/search?q=Magic+Cap">Magic +Cap</a> OS, used the moniker <a href="http://bentspoon.com">Bent Spoon Software</a> +to do consulting, and helped start <a href="http://www.eazel.com">Eazel</a>, a +company that is working to make Linux easier to use. Since 1997, he has worked +from his home in Los Angeles, CA, collaborating with clients and coworkers in +other locations.</p> +<p>He prefers to use and program Macintosh computers with C++. But Eazel's +mission to make Linux easier to use is best accomplished with a non-Macintosh +PC. (That is why Darin is sitting in front of <a href="darin_adler.jpg">two computers</a>.) +The other people working on the <a href="http://www.gnome.org">GNOME</a> project +don't like C++, so he's writing a lot of C code these days.</p> +<p>The <a href="darin_adler.jpg">larger version</a> of his picture shows him hard at +work with his C++ guru, his daughter Sophia.</p> +<p>He has hobbies and stuff but you don't want to read about that here.</p> +<p>You can contact him by sending mail to <a href="mailto:darin@bentspoon.com">darin@bentspoon.com</a>.</p> + +</body> + +</html> diff --git a/people/darin_adler.jpg b/people/darin_adler.jpg Binary files differnew file mode 100644 index 0000000000..8a17394ddb --- /dev/null +++ b/people/darin_adler.jpg diff --git a/people/darin_adler_small.jpg b/people/darin_adler_small.jpg Binary files differnew file mode 100644 index 0000000000..2b7771d95f --- /dev/null +++ b/people/darin_adler_small.jpg diff --git a/people/dave_abrahams.htm b/people/dave_abrahams.htm new file mode 100644 index 0000000000..06de18bdb2 --- /dev/null +++ b/people/dave_abrahams.htm @@ -0,0 +1,29 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Dave Abrahams</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="dave_abrahams.jpg"><img src="dave_abrahams_small.jpg" alt="dave_abrahams.jpg (30926 bytes)" +border="0" align="left" hspace="10" vspace="5" width="100" height="75"></a> +Dave Abrahams often shows up at C++ standards committee meetings on a bicycle.</p> +<p>Beyond that, we will just have to wait until he sends in a biography.</p> + +</body> + +</html> diff --git a/people/dave_abrahams.jpg b/people/dave_abrahams.jpg Binary files differnew file mode 100644 index 0000000000..ff45c4c306 --- /dev/null +++ b/people/dave_abrahams.jpg diff --git a/people/dave_abrahams_small.jpg b/people/dave_abrahams_small.jpg Binary files differnew file mode 100644 index 0000000000..ebc7077400 --- /dev/null +++ b/people/dave_abrahams_small.jpg diff --git a/people/dietmar_kuehl.htm b/people/dietmar_kuehl.htm new file mode 100644 index 0000000000..276b1be514 --- /dev/null +++ b/people/dietmar_kuehl.htm @@ -0,0 +1,42 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Dietmar Kuehl </title> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" WIDTH="277" HEIGHT="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td> + </tr> +</table> + +<p><a href="dietmar_kuehl.jpg"><img src="dietmar_kuehl_small.jpg" hspace="10" vspace="5" alt="dietmar_kuehl.jpg (57821 bytes)" border="0" align="left" WIDTH="100" HEIGHT="133"></a>Dietmar Kuehl (the +"ue" is actually a "u-umlaut", ie. one of those funny German +characters which has two dots above it) was fork(2)ed in early 1968.</p> + +<p>He visited school more or less successfully from 1973 to 1987. In 1987 he started to +study at the Technical University of Berlin. He finished his studies in 1997 with a Diplom +(roughly the German equivalent of a masters) in Mathematics. His thesis was "Design +Pattern for the Implementation of Graph Algorithms"; strike the "Design +Pattern" and put in "Generic" somehow to get an idea of the main topic. The +thesis is available from <a href="ftp://ftp.informatik.uni-konstanz.de/pub/algo/personal/kuehl/da.ps.gz">ftp://ftp.informatik.uni-konstanz.de/pub/algo/personal/kuehl/da.ps.gz</a>.</p> + +<p>Since 1997 he has worked as consultant for a small company called Claas Solutions (the +"aa" is no typo), mainly working for major German banks. Since late 1995 Dietmar +Kuehl has been one of the moderators of the newsgroup <a href="news:comp.lang.c++.moderated">comp.lang.c++.moderated</a>. He is active on the C++ +Standards committee.</p> + +<p>Email: <a href="mailto:dietmar.kuehl@claas-solutions.de">dietmar.kuehl@claas-solutions.de</a></p> + +<p>Home page: <a href="http://www.claas-solutions.de/kuehl/">http://www.claas-solutions.de/kuehl/</a></p> +</body> +</html> diff --git a/people/dietmar_kuehl.jpg b/people/dietmar_kuehl.jpg Binary files differnew file mode 100644 index 0000000000..c97f54e4fe --- /dev/null +++ b/people/dietmar_kuehl.jpg diff --git a/people/dietmar_kuehl_small.jpg b/people/dietmar_kuehl_small.jpg Binary files differnew file mode 100644 index 0000000000..ac63acaf51 --- /dev/null +++ b/people/dietmar_kuehl_small.jpg diff --git a/people/ed_brey.htm b/people/ed_brey.htm new file mode 100644 index 0000000000..d33e9f95df --- /dev/null +++ b/people/ed_brey.htm @@ -0,0 +1,51 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Ed Brey</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="ed_brey.jpg"><img src="ed_brey_small.jpg" alt="ed_brey.jpg" border="0" align="left" hspace="10" vspace="5" width="100" height="133"></a> +Ed Brey lives in Menomonee Falls, Wisconsin, a village outside of Milwaukee. In +the summertime, he likes to play tennis with his fiancée, and in the winter, if +there is enough snow, he likes to go tobogganing or ice-skating. If it is not +nice enough outside for either of those, he plays on the piano. Although Ed +enjoys doing those activities, most of his time is currently spent at work and +at home studying. He works at <a href="http://www.eaton.com">Eaton Corporation</a> +in Milwaukee and is working on his masters degree in computer engineering +through <a href="http://www.ntu.edu">NTU</a>. +<p>Ed started working for Eaton as part of <a href="http://www.mu.edu">Marquette +University</a>'s engineering co-op program. Upon graduation in 1995 from +Marquette with a BS in electrical and computer engineering, he was hired on +full-time at Eaton. At Eaton, Ed has been primarily focused on embedded system +design and programming in the industrial controls industry. Recently, however, +he has delved into writing a near-real-time database engine running under +Windows. +<p>Ed has held programming as a pastime since his grade school days, when he +wrote a babysitting invoicing program. Soon after, he wrote a game inspired by +the TV game show "Press Your Luck". Ever since, programming languages +and concepts, along with finding ways to improve the art and science of coding +software, have always peeked his interest. +<p>Lastly, Ed has managed to retain his perspective. As fun as computers and +programming are, Ed's true love in his life is his wife Beth.</p> +<hr> +<p>Email: <a href="mailto:brey@ductape.net">brey@ductape.net</a> +<p>Home page: <a href="http://www.cc.edu/~eschmied/">http://ww.cc.edu/~eschmied/</a> + +</body> + +</html> diff --git a/people/ed_brey.jpg b/people/ed_brey.jpg Binary files differnew file mode 100644 index 0000000000..3a37894726 --- /dev/null +++ b/people/ed_brey.jpg diff --git a/people/ed_brey_small.jpg b/people/ed_brey_small.jpg Binary files differnew file mode 100644 index 0000000000..bf7849a914 --- /dev/null +++ b/people/ed_brey_small.jpg diff --git a/people/gary_powell.htm b/people/gary_powell.htm new file mode 100644 index 0000000000..964eb4a916 --- /dev/null +++ b/people/gary_powell.htm @@ -0,0 +1,31 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Gary Powell</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="gary_powell.jpg"><img border="0" src="gary_powell_small.jpg" alt="gary_powell.jpg (13577 bytes)" align="left" hspace="10" vspace="5" width="100" height="133"></a>Gary Powell has been messing around with C++ since '87 when he dreamed about adding his own operators to the language. Since then he's been busy +overloading everything in sight, and working on bringing functional programming to C++.</p> +<p>He currently works for Sierra On-line <a href="http://www.sierra.com">http://www.sierra.com</a> a division of +Havas Interactive, a wholly owned subsidiary of Vivedi Universal of France, <a href="http://www.vivendi.com">http://www.vivendi.com</a> as a game programmer where he writes AI.</p> +<p>He can be reached at <a href="mailto:gary.powell@sierra.com">gary.powell@sierra.com</a> but don't ask him how to solve +the riddle of the left handed troll.</p> + +</body> + +</html> diff --git a/people/gary_powell.jpg b/people/gary_powell.jpg Binary files differnew file mode 100644 index 0000000000..349ad1cdbe --- /dev/null +++ b/people/gary_powell.jpg diff --git a/people/gary_powell_small.jpg b/people/gary_powell_small.jpg Binary files differnew file mode 100644 index 0000000000..64ed30e619 --- /dev/null +++ b/people/gary_powell_small.jpg diff --git a/people/gavin_collings.htm b/people/gavin_collings.htm new file mode 100644 index 0000000000..a5c02954c5 --- /dev/null +++ b/people/gavin_collings.htm @@ -0,0 +1,31 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Gavin Collings</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" WIDTH="277" HEIGHT="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><img border="0" src="gavin_collings_small.jpg" alt="gavin_collings.jpg (16786 bytes)" align="left" hspace="10" vspace="5" width="100" height="137">Gavin Collings was born and bred in Wiltshire in the UK. After spending the +1960s in childish pursuits, he spent the 1970s at school becoming ever more fascinated with the mysteries of physics. This he went on to study at St +John's College, Cambridge until 1985, at which time he entered the world of employment.</p> +<p>After early work with other languages, he became involved with C++ in the early 1990s and now works as consultant, not far from his original home, in +Gloucestershire.</p> +<p>He enjoys playing the piano, walking in the local countryside, playing 5-a-side (indoor soccer), and sailing.</p> + +</body> + +</html> diff --git a/people/gavin_collings.jpg b/people/gavin_collings.jpg Binary files differnew file mode 100644 index 0000000000..b3ef794763 --- /dev/null +++ b/people/gavin_collings.jpg diff --git a/people/gavin_collings_small.jpg b/people/gavin_collings_small.jpg Binary files differnew file mode 100644 index 0000000000..f9abc3b792 --- /dev/null +++ b/people/gavin_collings_small.jpg diff --git a/people/greg_colvin.htm b/people/greg_colvin.htm new file mode 100644 index 0000000000..85974b487a --- /dev/null +++ b/people/greg_colvin.htm @@ -0,0 +1,28 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Greg Colvin</title> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" WIDTH="277" HEIGHT="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td> + </tr> +</table> + +<p><a href="greg_colvin.jpg"><img src="greg_colvin_small.jpg" alt="greg_colvin.jpg (52k bytes)" border="0" align="left" hspace="10" vspace="5" WIDTH="100" HEIGHT="133"></a> Dr. +Greg Colvin has been hacking happily since 1972. He is a member of the ANSI/ISO C++ +standards committee and a Principal Member of Technical Staff with the Java Products Group +at Oracle Corporation. In his spare time he plays apocalyptic electric blues guitar in his +Colorado, USA home studio.</p> +</body> +</html> diff --git a/people/greg_colvin.jpg b/people/greg_colvin.jpg Binary files differnew file mode 100644 index 0000000000..8bde68f374 --- /dev/null +++ b/people/greg_colvin.jpg diff --git a/people/greg_colvin_small.jpg b/people/greg_colvin_small.jpg Binary files differnew file mode 100644 index 0000000000..3c82cbc5bb --- /dev/null +++ b/people/greg_colvin_small.jpg diff --git a/people/howard_hinnant.htm b/people/howard_hinnant.htm new file mode 100644 index 0000000000..027b84f788 --- /dev/null +++ b/people/howard_hinnant.htm @@ -0,0 +1,34 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Howard Hinnant</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td> + </tr> +</table> + +<p><a href="howard_hinnant.jpg"><img border="0" src="howard_hinnant_small.jpg" align="left" hspace="10" vspace="5" alt="howard_hinnant.jpg (19817 bytes)" width="100" height="97"></a>When +Howard Hinnant is not monkeying around, he is the principal author of the +Metrowerks CodeWarrior C++ library. He is also a member of the C++ Standards +committee.</p> +<p>Howard is married with four children, two dogs, one cat, a rabbit, an +undetermined number of rodents (which the cat ignores), and ... well, we're +really not sure what else. When not sitting in front of his computer, Howard +enjoys snow skiing and ... more, snow skiing.</p> + +</body> + +</html> diff --git a/people/howard_hinnant.jpg b/people/howard_hinnant.jpg Binary files differnew file mode 100644 index 0000000000..a63a446b47 --- /dev/null +++ b/people/howard_hinnant.jpg diff --git a/people/howard_hinnant_small.jpg b/people/howard_hinnant_small.jpg Binary files differnew file mode 100644 index 0000000000..373892bb51 --- /dev/null +++ b/people/howard_hinnant_small.jpg diff --git a/people/jens_maurer.htm b/people/jens_maurer.htm new file mode 100644 index 0000000000..cf284bccf1 --- /dev/null +++ b/people/jens_maurer.htm @@ -0,0 +1,39 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Jens Maurer</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="jens_maurer.jpg"><img border="0" src="jens_maurer_small.jpg" alt="jens_maurer.jpg (15698 bytes)" hspace="10" vspace="5" align="left" width="100" height="124"></a> +Jens Maurer is a software developer from Germany who lives close to +Frankfurt/Main. He was born in 1973 and hasn't died yet.</p> +<p>He has worked for a multimedia company programming home-banking applications, +CGI scripts and Java applications. He also helped program some simulation +systems for long-term decision support to aid businessmen in arguing about +company investments.</p> +<p>He is neither married nor does he have a girl friend, but asked his +colleagues to find one for him.</p> +<p>In his spare time, he likes visiting foreign countries but dislikes getting +there in uncomfortable airplane seats. On random week-ends, he enjoys +participating in historic dance courses (without a costume, of course). +Sometimes, he needs fresh air and goes for a walk. </p> +<p>Email: <a href="mailto:Jens.Maurer@gmx.net">Jens.Maurer@gmx.net</a></p> + +</body> + +</html> diff --git a/people/jens_maurer.jpg b/people/jens_maurer.jpg Binary files differnew file mode 100644 index 0000000000..2dc21b42f5 --- /dev/null +++ b/people/jens_maurer.jpg diff --git a/people/jens_maurer_small.jpg b/people/jens_maurer_small.jpg Binary files differnew file mode 100644 index 0000000000..6cdc572db8 --- /dev/null +++ b/people/jens_maurer_small.jpg diff --git a/people/jeremy_siek.htm b/people/jeremy_siek.htm new file mode 100644 index 0000000000..45aca66c4f --- /dev/null +++ b/people/jeremy_siek.htm @@ -0,0 +1,40 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Jeremy Siek</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td> + </tr> +</table> + +<p><a href="jeremy_siek.jpg"><img border="0" +src="jeremy_siek_small.jpg" alt="jeremy_siek.jpg (12867 bytes)" +align="left" hspace="10" vspace="5" width="100" +height="133"></a>Jeremy Siek is a Ph.D. student at Univ. of Notre Dame.<br> +<br> +He is the author of the Matrix Template Library (MTL), and helped +design the Generic Graph Component Library, which is now the Boost +Graph Library (BGL).<br> +<br> +Once in a while Jeremy "comes up for air" and enjoys fencing, hiking, skiing, and reading. He's also been spotted at a few fightin' irish +tailgaters (BYOB).<br> +<br> +Jeremy has an intense fear for the ancient dark forests where dusty decks thrive and devour programmers, places where the light of abstraction +has not yet reached.</p> + +</body> + +</html> diff --git a/people/jeremy_siek.jpg b/people/jeremy_siek.jpg Binary files differnew file mode 100644 index 0000000000..2b8115ce20 --- /dev/null +++ b/people/jeremy_siek.jpg diff --git a/people/jeremy_siek_small.jpg b/people/jeremy_siek_small.jpg Binary files differnew file mode 100644 index 0000000000..514e1bdb26 --- /dev/null +++ b/people/jeremy_siek_small.jpg diff --git a/people/john_maddock.htm b/people/john_maddock.htm new file mode 100644 index 0000000000..66adc41203 --- /dev/null +++ b/people/john_maddock.htm @@ -0,0 +1,41 @@ +<html> + +<head> +<meta http-equiv="Content-Type" +content="text/html; charset=iso-8859-1"> +<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0"> +<title>John Maddock</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" cellpadding="2" bgcolor="#007F7F"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" + alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font color="#FFFFFF" size="4" + face="Arial">Home </font></a></td> + <td><a href="../libs/libraries.htm"><font color="#FFFFFF" + size="4" face="Arial">Libraries </font></a></td> + <td><a href="people.htm"><font color="#FFFFFF" + size="4" face="Arial">People </font></a></td> + <td><a href="../more/faq.htm"><font color="#FFFFFF" + size="4" face="Arial">FAQ </font></a></td> + <td><a href="../more/index.htm"><font color="#FFFFFF" + size="4" face="Arial">More </font></a></td> + </tr> +</table> + +<p><a href="john_maddock.jpg"><img src="john_maddock_small.jpg" +alt="john_maddock.jpg (14611bytes)" align="left" border="0" +hspace="10" vspace="5" width="100" height="133"></a> John Maddock +is a software developer from England and holds a PhD in Chemistry, +but found that computers smell less and explode less often!</p> + +<p>John is the author of the <a +href="http://ourworld.compuserve.com/homepages/John_Maddock/regexpp.htm">regex++ +regular expression package</a>, has an almost pathological +interest in anything that "can't be done", and can be +contacted at <a href="mailto:John_Maddock@compuserve.com">John_Maddock@compuserve.com</a>.</p> +</body> +</html> diff --git a/people/john_maddock.jpg b/people/john_maddock.jpg Binary files differnew file mode 100644 index 0000000000..9aaa0c90ce --- /dev/null +++ b/people/john_maddock.jpg diff --git a/people/john_maddock_small.jpg b/people/john_maddock_small.jpg Binary files differnew file mode 100644 index 0000000000..52368a68a8 --- /dev/null +++ b/people/john_maddock_small.jpg diff --git a/people/kevlin_henney.htm b/people/kevlin_henney.htm new file mode 100644 index 0000000000..4cef8af5cc --- /dev/null +++ b/people/kevlin_henney.htm @@ -0,0 +1,49 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Kevlin Henney</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td> + </tr> +</table> + +<p><a href="kevlin_henney.jpg"><img border="0" src="kevlin_henney_small.jpg" alt="kevlin_henney.jpg (18107 bytes)" align="left" hspace="10" vspace="5" width="100" height="142"></a> +Kevlin Henney (<a href="mailto:kevlin@curbralan.com">mailto:kevlin@curbralan.com</a>, <a href="http://www.curbralan.com">http://www.curbralan.com</a>) +is an independent consultant and trainer based in the UK. He has developed and +delivered training course material and consultancy on many aspects of OO +development, which he has practiced across a number of domains for over a +decade. His professional interests include patterns, OO and component based +design, architecture, distributed object systems, C++, and Java. He is also a +member of the BSI C++ standards committee. +</p> + +<p>Now that writing code is no longer the core responsibility of his job, his +non-professional interests seem to include the hacking associated with the +aforementioned professional interests. However, never being one to keep +something to himself (like C++'s relationship with C, this is regarded as both a +strength and a weakness), he shares/inflicts (delete as necessary) his +professional and non-professional development experiences with/on (ditto) others +through writing articles and presenting tutorials, workshops and papers at +conferences.</p> +<p>He is married, and not just to his work. He and Carolyn have neither children +nor pets, but he feels that the missing aggravation is made up for by a house +that needs a great deal of work, requiring constant attention and feeding of +money. The little spare time that remains to him is taken up with music, +reading, pub appreciation, etc. Finally, although he enjoys writing, Kevlin is +not really one for writing in the third person.</p> +</body> + +</html> diff --git a/people/kevlin_henney.jpg b/people/kevlin_henney.jpg Binary files differnew file mode 100644 index 0000000000..1bdc12256f --- /dev/null +++ b/people/kevlin_henney.jpg diff --git a/people/kevlin_henney_small.jpg b/people/kevlin_henney_small.jpg Binary files differnew file mode 100644 index 0000000000..348e6a0ac3 --- /dev/null +++ b/people/kevlin_henney_small.jpg diff --git a/people/liequan_lee.htm b/people/liequan_lee.htm new file mode 100644 index 0000000000..a885d91409 --- /dev/null +++ b/people/liequan_lee.htm @@ -0,0 +1,33 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Lie-Quan Lee</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> + +<p><a href="liequan_lee.jpg"><img border="0" src="liequan_lee_small.jpg" alt="liequan_lee.jpg (24165 bytes)" hspace="10" vspace="5" width="93" height="133" align="left"></a>Lie-Quan +Lee, AKA Rich Lee, is a graduate stduent in Computer Science at University of +Notre Dame. He is the author of the Generic Graph Component Library (GGCL).</p> +<p>He has a strong desire of learning to disassemble and assemable any +electrical appliances. He likes playing bridge but never had a chance to play it +after he entered the wonderful world of computers.</p> +<p>He can be contacted at llee1@lsc.nd.edu.</p> + +</body> + +</html> diff --git a/people/liequan_lee.jpg b/people/liequan_lee.jpg Binary files differnew file mode 100644 index 0000000000..a7e54f20b5 --- /dev/null +++ b/people/liequan_lee.jpg diff --git a/people/liequan_lee_small.jpg b/people/liequan_lee_small.jpg Binary files differnew file mode 100644 index 0000000000..af03f10a29 --- /dev/null +++ b/people/liequan_lee_small.jpg diff --git a/people/mark_rodgers.htm b/people/mark_rodgers.htm new file mode 100644 index 0000000000..27e6df3c1a --- /dev/null +++ b/people/mark_rodgers.htm @@ -0,0 +1,36 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Mark Rodgers</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="mark_rodgers.jpg"><img border="0" src="mark_rodgers_small.jpg" alt="mark_rodgers.jpg (23035 bytes)" align="left" hspace="10" vspace="5" width="100" height="75"></a>Mark +Rodgers lives in <a href="http://www.wcc.govt.nz/wellington/">Wellington</a>, +the capital of <a href="http://www.govt.nz/aboutnz/profile.php3">New Zealand</a>, +with his wife, Clare, and their son, Ronnie.</p> +<p>He studied Computer Science at <a href="http://www.vuw.ac.nz">Victoria +University of Wellington</a> from 1983 to 1986, completing a <nobr>B.Sc. (Hons).</nobr> +He now works as consultant through his company, Cadenza New Zealand Ltd, and +also markets Cadenza Drawing Board™, a CAD system he developed.</p> +<p>Mark has been programming in C++ since about 1990, and loves every minute of +it, but is continually amazed at how much more he still has to learn.</p> +<p>You can contact Mark at <a href="mailto:mark.rodgers@cadenza.co.nz">mark.rodgers@cadenza.co.nz</a>. + +</body> + +</html> diff --git a/people/mark_rodgers.jpg b/people/mark_rodgers.jpg Binary files differnew file mode 100644 index 0000000000..0542e323a4 --- /dev/null +++ b/people/mark_rodgers.jpg diff --git a/people/mark_rodgers_small.jpg b/people/mark_rodgers_small.jpg Binary files differnew file mode 100644 index 0000000000..a4a34c768b --- /dev/null +++ b/people/mark_rodgers_small.jpg diff --git a/people/nicolai_josuttis.jpg b/people/nicolai_josuttis.jpg Binary files differnew file mode 100644 index 0000000000..9cedc21cd2 --- /dev/null +++ b/people/nicolai_josuttis.jpg diff --git a/people/nicolai_josuttis_small.jpg b/people/nicolai_josuttis_small.jpg Binary files differnew file mode 100644 index 0000000000..28b828b692 --- /dev/null +++ b/people/nicolai_josuttis_small.jpg diff --git a/people/paul_moore.htm b/people/paul_moore.htm new file mode 100644 index 0000000000..de4b5c7729 --- /dev/null +++ b/people/paul_moore.htm @@ -0,0 +1,38 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>Paul Moore</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="paul_moore.jpg"><img border="0" src="paul_moore_small.jpg" alt="paul_moore.jpg (12023 bytes)" align="left" hspace="10" vspace="5" width="100" height="81"></a>Paul +Moore lives in Cheshire, England. He is married, with one son. His "day +job" is as an Oracle DBA, but he writes C and C++ programs in his spare +time.</p> +<p>Paul started programming on Acorn's BBC Micro and RISC PC series of +computers, but finally went mainstream and bought a PC, on which he now runs +Windows and Linux. Paul's main interest is in porting and developing open-source +software, and so his main programming language is C (at least until the open +source community switches to C++).</p> +<p>Paul's main claim to C++ fame is that he owns all 3 editions of Bjarne +Stroustrup's "The C++ Programming language", plus the ARM and the C++ +standard, but he didn't own a C++ compiler until after the 3rd edition of +Stroustrup's book came out. Make of that what you will...</p> + +</body> + +</html> diff --git a/people/paul_moore.jpg b/people/paul_moore.jpg Binary files differnew file mode 100644 index 0000000000..25510b0a6b --- /dev/null +++ b/people/paul_moore.jpg diff --git a/people/paul_moore_small.jpg b/people/paul_moore_small.jpg Binary files differnew file mode 100644 index 0000000000..b792c3ce7c --- /dev/null +++ b/people/paul_moore_small.jpg diff --git a/people/people.htm b/people/people.htm new file mode 100644 index 0000000000..f58d3877be --- /dev/null +++ b/people/people.htm @@ -0,0 +1,115 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>People</title> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<meta name="Microsoft Border" content="none, default"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<h1>Boost People</h1> +<p>(Click on the names for biographies)<br> +(Click on the images for enlarged images)</p> +<table border="0" cellpadding="4" cellspacing="4"> + <tr> + <td><a href="dave_abrahams.htm">Dave Abrahams</a></td> + <td><a href="dave_abrahams.jpg"><img border="0" src="dave_abrahams_small.jpg" alt="dave_abrahams.jpg (30926 bytes)" width="100" height="75"></a></td> + </tr> + <tr> + <td><a href="darin_adler.htm">Darin Adler</a></td> + <td><a href="darin_adler.jpg"><img border="0" src="darin_adler_small.jpg" alt="darin_adler.jpg (30416 bytes)" width="100" height="133"></a></td> + </tr> + <tr> + <td><a href="valentin_bonnard.htm">Valentin Bonnard</a></td> + <td><a href="valentin_bonnard.jpg"><img src="valentin_bonnard_small.jpg" alt="valentin_bonnard.jpg (18207 bytes)" border="0" width="100" height="142"></a></td> + </tr> + <tr> + <td><a href="ed_brey.htm">Ed Brey</a></td> + <td><a href="ed_brey.jpg"><img border="0" src="ed_brey_small.jpg" alt="ed_brey.jpg (13913 bytes)" width="100" height="118"></a></td> + </tr> + <tr> + <td><a href="gavin_collings.htm">Gavin Collings</a></td> + <td><a href="gavin_collings.jpg"><img border="0" src="gavin_collings_small.jpg" alt="gavin_collings.jpg (16739 bytes)" width="100" height="137"></a></td> + </tr> + <tr> + <td><a href="greg_colvin.htm">Greg Colvin</a></td> + <td><a href="greg_colvin.jpg"><img src="greg_colvin_small.jpg" alt="greg_colvin.jpg (52740 bytes)" border="0" width="100" height="133"></a></td> + </tr> + <tr> + <td><a href="http://www.ocsltd.com/founderff.html">Sean Corfield</a></td> + <td><a href="sean_corfield.jpg"><img src="sean_corfield_small.jpg" alt="sean_corfield.jpg (51225 bytes)" border="0" width="100" height="133"></a></td> + </tr> + <tr> + <td><a href="beman_dawes.html">Beman Dawes</a></td> + <td><a href="beman_dawes.jpg"><img src="beman_dawes_small.jpg" alt="beman_dawes.jpg (47863 bytes)" border="0" width="100" height="133"></a></td> + </tr> + <tr> + <td><a href="aleksey_gurtovoy.htm">Aleksey Gurtovoy</a></td> + <td><a href="aleksey_gurtovoy.jpg"><img border="0" src="aleksey_gurtovoy_small.jpg" alt="aleksey_gurtovoy.jpg (12871 bytes)" width="100" height="120"></a></td> + </tr> + <tr> + <td><a href="kevlin_henney.htm">Kevlin Henney</a></td> + <td><a href="kevlin_henney.jpg"><img src="kevlin_henney_small.jpg" alt="kevlin_henney.jpg (27191 bytes)" border="0" width="100" height="133"></a></td> + </tr> + <tr> + <td><a href="howard_hinnant.htm">Howard Hinnant</a></td> + <td><a href="howard_hinnant.jpg"><img border="0" src="howard_hinnant_small.jpg" alt="howard_hinnant.jpg (19817 bytes)" width="100" height="97"></a></td> + </tr> + <tr> + <td><a href="http://www.josuttis.com">Nicolai Josuttis</a></td> + <td><a href="nicolai_josuttis.jpg"><img src="nicolai_josuttis_small.jpg" alt="nicolai_josuttis.jpg (40745 bytes)" border="0" width="100" height="133"></a></td> + </tr> + <tr> + <td><a href="william_kempf.htm">William Kempf</a></td> + <td><a href="william_kempf.jpg"><img border="0" src="william_kempf_small.jpg" alt="william_kempf.jpg (10935 bytes)" width="100"></a></td> + </tr> + <tr> + <td><a href="dietmar_kuehl.htm">Dietmar Kühl</a></td> + <td><a href="dietmar_kuehl.jpg"><img src="dietmar_kuehl_small.jpg" alt="dietmar_kuehl.jpg (57821 bytes)" border="0" width="100" height="133"></a></td> + </tr> + <tr> + <td><a href="liequan_lee.htm">Lie-Quan Lee</a></td> + <td><a href="liequan_lee.jpg"><img border="0" src="liequan_lee_small.jpg" alt="liequan_lee.jpg (24165 bytes)" width="93" height="133"></a></td> + </tr> + <tr> + <td><a href="john_maddock.htm">John Maddock</a></td> + <td><a href="john_maddock.jpg"><img border="0" src="john_maddock_small.jpg" alt="john_maddock.jpg (14611 bytes)" width="100" height="132"></a></td> + </tr> + <tr> + <td><a href="jens_maurer.htm">Jens Maurer</a></td> + <td><a href="jens_maurer.jpg"><img border="0" src="jens_maurer_small.jpg" width="100" height="124"></a></td> + </tr> + <tr> + <td><a href="paul_moore.htm">Paul Moore</a></td> + <td><a href="paul_moore.jpg"><img border="0" src="paul_moore_small.jpg" alt="paul_moore.jpg (12023 bytes)" width="100" height="81"></a></td> + </tr> + <tr> + <td><a href="gary_powell.htm">Gary Powell</a></td> + <td><a href="gary_powell.jpg"><img border="0" src="gary_powell_small.jpg" alt="gary_powell.jpg (13577 bytes)" width="100" height="133"></a></td> + </tr> + <tr> + <td><a href="mark_rodgers.htm">Mark Rodgers</a></td> + <td><a href="mark_rodgers.jpg"><img border="0" src="mark_rodgers_small.jpg" alt="mark_rodgers.jpg (23035 bytes)" width="100" height="75"></a></td> + </tr> + <tr> + <td><a href="jeremy_siek.htm">Jeremy Siek</a></td> + <td><a href="jeremy_siek.jpg"><img border="0" src="jeremy_siek_small.jpg" alt="jeremy_siek.jpg (12867 bytes)" width="100" height="133"></a></td> + </tr> +</table> + +</body> + +</html> diff --git a/people/sean_corfield.jpg b/people/sean_corfield.jpg Binary files differnew file mode 100644 index 0000000000..bd4f7b171e --- /dev/null +++ b/people/sean_corfield.jpg diff --git a/people/sean_corfield_small.jpg b/people/sean_corfield_small.jpg Binary files differnew file mode 100644 index 0000000000..732fd26f58 --- /dev/null +++ b/people/sean_corfield_small.jpg diff --git a/people/valentin_bonnard.htm b/people/valentin_bonnard.htm new file mode 100644 index 0000000000..d4e38ee372 --- /dev/null +++ b/people/valentin_bonnard.htm @@ -0,0 +1,27 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> +<title>Valentin Bonnard</title> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" WIDTH="277" HEIGHT="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td> + </tr> +</table> + +<p><a href="valentin_bonnard.jpg"><img src="valentin_bonnard_small.jpg" alt="valentin_bonnard.jpg (18207 bytes)" border="0" align="left" hspace="10" vspace="5" WIDTH="100" HEIGHT="133"></a>Valentin Bonnard is currently studying the semantics of +programming languages and logical proofs. In his spare time, he writes C++ programs, and +participates in newsgroup discussions about C++. He is also a member of AFNOR, the French +C++ standardisation committee. </p> +</body> +</html> diff --git a/people/valentin_bonnard.jpg b/people/valentin_bonnard.jpg Binary files differnew file mode 100644 index 0000000000..fb3d7afde1 --- /dev/null +++ b/people/valentin_bonnard.jpg diff --git a/people/valentin_bonnard_small.jpg b/people/valentin_bonnard_small.jpg Binary files differnew file mode 100644 index 0000000000..6bc8cdb71c --- /dev/null +++ b/people/valentin_bonnard_small.jpg diff --git a/people/william_kempf.htm b/people/william_kempf.htm new file mode 100644 index 0000000000..8139ee3648 --- /dev/null +++ b/people/william_kempf.htm @@ -0,0 +1,35 @@ +<html> + +<head> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 4.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>William Kempf</title> +</head> + +<body bgcolor="#FFFFFF" text="#000000"> + +<table border="1" bgcolor="#007F7F" cellpadding="2"> + <tr> + <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td> + <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td> + <td><a href="../libs/libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td> + <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td> + <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td> + <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td> + </tr> +</table> +<p><a href="william_kempf.jpg"><img border="0" src="william_kempf_small.jpg" alt="william_kempf.jpg (10935 bytes)" align="left" hspace="10" vspace="5" width="107" height="130"></a> +Bill Kempf lives in Omaha, NE with his wife Bonnie, his cat Dexter and his +two Chinchillas, Chimney and Minuet. He married on Oct. 30, 1999 where he and +his wife held a Halloween costume reception. If that doesn't give you an idea of +what kind of guy he is, nothing will.</p> +<p>Bill graduated from Doane, a small private college in Nebraska in 1992 with a +B.S. in Computer Science/Math. Being in the wrong place at the wrong time he had +to take a job as the only person in an IS shop for a local affiliate of the +Bunge Grain Company. In 1995 he moved on to a job as a software engineer for +First Data Resources where he worked on client/server financial applications.</p> + +</body> + +</html> diff --git a/people/william_kempf.jpg b/people/william_kempf.jpg Binary files differnew file mode 100644 index 0000000000..41d239dc63 --- /dev/null +++ b/people/william_kempf.jpg diff --git a/people/william_kempf_small.jpg b/people/william_kempf_small.jpg Binary files differnew file mode 100644 index 0000000000..c0589dc500 --- /dev/null +++ b/people/william_kempf_small.jpg |