summaryrefslogtreecommitdiff
path: root/ACE/contrib/utility/Documentation
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/contrib/utility/Documentation')
-rw-r--r--ACE/contrib/utility/Documentation/Build.xhtml58
-rw-r--r--ACE/contrib/utility/Documentation/CommandLine/News.xhtml31
-rw-r--r--ACE/contrib/utility/Documentation/CommandLine/Terminology.xhtml272
-rw-r--r--ACE/contrib/utility/Documentation/CommandLine/Thoughts8
-rw-r--r--ACE/contrib/utility/Documentation/CommandLine/index.xhtml39
-rw-r--r--ACE/contrib/utility/Documentation/ExH/Compound.hpp.html50
-rw-r--r--ACE/contrib/utility/Documentation/ExH/Example/Makefile26
-rw-r--r--ACE/contrib/utility/Documentation/ExH/Example/bad_cast.cpp.html63
-rw-r--r--ACE/contrib/utility/Documentation/ExH/Example/compound.cpp.html153
-rw-r--r--ACE/contrib/utility/Documentation/ExH/Example/hello_world.cpp.html152
-rw-r--r--ACE/contrib/utility/Documentation/ExH/Example/logic_to_system.cpp.html69
-rw-r--r--ACE/contrib/utility/Documentation/ExH/Logic/DescriptiveException.hpp.html61
-rw-r--r--ACE/contrib/utility/Documentation/ExH/Logic/Exception.hpp.html43
-rw-r--r--ACE/contrib/utility/Documentation/ExH/Logic/Makefile20
-rw-r--r--ACE/contrib/utility/Documentation/ExH/Makefile16
-rw-r--r--ACE/contrib/utility/Documentation/ExH/Makefile.documentation20
-rw-r--r--ACE/contrib/utility/Documentation/ExH/News.xhtml47
-rw-r--r--ACE/contrib/utility/Documentation/ExH/System/DescriptiveException.hpp.html64
-rw-r--r--ACE/contrib/utility/Documentation/ExH/System/Exception.hpp.html32
-rw-r--r--ACE/contrib/utility/Documentation/ExH/System/Makefile20
-rw-r--r--ACE/contrib/utility/Documentation/ExH/index.xhtml60
-rw-r--r--ACE/contrib/utility/Documentation/Hetero/News.xhtml31
-rw-r--r--ACE/contrib/utility/Documentation/Hetero/index.xhtml62
-rw-r--r--ACE/contrib/utility/Documentation/Introspection/News.xhtml38
-rw-r--r--ACE/contrib/utility/Documentation/Introspection/index.xhtml42
-rw-r--r--ACE/contrib/utility/Documentation/Makefile16
-rw-r--r--ACE/contrib/utility/Documentation/News.xhtml72
-rw-r--r--ACE/contrib/utility/Documentation/ReferenceCounting/DefaultImpl.hpp.html93
-rw-r--r--ACE/contrib/utility/Documentation/ReferenceCounting/Interface.hpp.html82
-rw-r--r--ACE/contrib/utility/Documentation/ReferenceCounting/Makefile22
-rw-r--r--ACE/contrib/utility/Documentation/ReferenceCounting/News.xhtml90
-rw-r--r--ACE/contrib/utility/Documentation/ReferenceCounting/SmartPtr.hpp.html103
-rw-r--r--ACE/contrib/utility/Documentation/ReferenceCounting/StrictPtr.hpp.html107
-rw-r--r--ACE/contrib/utility/Documentation/ReferenceCounting/index.xhtml50
-rw-r--r--ACE/contrib/utility/Documentation/ReleaseProcess13
-rw-r--r--ACE/contrib/utility/Documentation/Style/CXX.css9
-rw-r--r--ACE/contrib/utility/Documentation/Style/CXX_Blue.css25
-rw-r--r--ACE/contrib/utility/Documentation/Style/Default.css45
-rw-r--r--ACE/contrib/utility/Documentation/Synch/Makefile16
-rw-r--r--ACE/contrib/utility/Documentation/Synch/News.xhtml36
-rw-r--r--ACE/contrib/utility/Documentation/Synch/Policy/Makefile20
-rw-r--r--ACE/contrib/utility/Documentation/Synch/Policy/Null.hpp.html59
-rw-r--r--ACE/contrib/utility/Documentation/Synch/index.xhtml48
-rw-r--r--ACE/contrib/utility/Documentation/TODO53
-rw-r--r--ACE/contrib/utility/Documentation/Template.xhtml33
-rw-r--r--ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount95
-rw-r--r--ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount217
-rw-r--r--ACE/contrib/utility/Documentation/Thoughts/Enum/EnumInfo45
-rw-r--r--ACE/contrib/utility/Documentation/index.xhtml81
49 files changed, 2707 insertions, 0 deletions
diff --git a/ACE/contrib/utility/Documentation/Build.xhtml b/ACE/contrib/utility/Documentation/Build.xhtml
new file mode 100644
index 00000000000..97e759bdeb7
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Build.xhtml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/Build.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Building Utility Library</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="build,utility,library"/>
+ <meta name="description" content="Building Utility Library"/>
+
+ <link rel="stylesheet" type="text/css" href="Style/Default.css"/>
+
+</head>
+
+<body>
+
+<h1>Introduction</h1>
+
+<p>Utility Library mostly consists of a header-only sub-libraries
+(the only exception is Introspection Library) so you don't need to
+build anything to start using it. However you may want to build
+examples or libraries that require compilation. This section describes
+how to do that.</p>
+
+<h1>Prerequisites</h1>
+
+<p>To build libraries or examples you will need GNU make and a C++
+compiler with good support of ISO C++ standard.</p>
+
+<p>Utility Library building environment requires latest features of
+GNU make so you have the following options (in the order of increasing
+complexity):</p>
+
+<ul>
+<li>Use GNU make 3.81 or later (not available at the time this is written).</li>
+<li>Use GNU make 3.80 with patches for bug
+<a href="http://savannah.gnu.org/bugs/?func=detailbug&amp;bug_id=1516&amp;group_id=71">1516</a>
+and
+<a href="http://savannah.gnu.org/bugs/?func=detailbug&amp;bug_id=1517&amp;group_id=71">1517</a>.
+</li>
+<li>Use GNU make from CVS.</li>
+</ul>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/CommandLine/News.xhtml b/ACE/contrib/utility/Documentation/CommandLine/News.xhtml
new file mode 100644
index 00000000000..31738f2150d
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/CommandLine/News.xhtml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/CommandLine/News.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Command Line Processing Library News</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="commandline,command,line,option,argument,parameter,operand,argc,argv,news"/>
+ <meta name="description" content="Command Line Processing Library News"/>
+
+ <link rel="stylesheet" type="text/css" href="../Style/Default.css"/>
+
+</head>
+
+<body>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/CommandLine/Terminology.xhtml b/ACE/contrib/utility/Documentation/CommandLine/Terminology.xhtml
new file mode 100644
index 00000000000..6c250f1fa70
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/CommandLine/Terminology.xhtml
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/CommandLine/Terminology.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Command Line Processing Model and Terminology</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2002-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="command,line,terminology,model,argv,argc,argument,command,option,operand"/>
+ <meta name="description" content="Command Line Processing Model and Terminology"/>
+
+ <link rel="stylesheet" type="text/css" href="../Style/Default.css"/>
+
+ <style type="text/css">
+
+ table.center {
+ border-collapse : collapse;
+ }
+
+ table.center * td {
+ text-align : center;
+ vertical-align : middle;
+ }
+
+ </style>
+
+</head>
+
+<body>
+
+<h1>Introduction</h1>
+
+<p>
+Command line is probably the most universal way of passing information from
+caller to the program. Concept of a command line is part of most operating
+systems and programming languages including C and C++. However model and
+terminology for command line processing vary greatly among different
+systems.</p>
+
+<p>
+<a href="http://unix.org/online.html">Single UNIX Specification</a> contains
+<a href="http://opengroup.org/onlinepubs/007904975/basedefs/xbd_chap12.html">
+Utility Argument Syntax Conventions and Guidelines</a> which document basic
+terminology for command line processing. Single UNIX Specification model is
+a "common denominator" for different UNIX implementations. It is somewhat
+minimal and targets system utilities rather than a wide spectrum of
+applications. Another de-facto command line processing model is
+<a href="http://gnu.org/prep/standards_18.html"> GNU Standard for Command
+Line Interfaces</a> which generally encourages conformance to the Single UNIX
+Specification but adds few extensions and uses different terminology.</p>
+
+<p>
+The idea behind this document is to establish terminology and complete model
+for command line processing. Terms translation between this document, Single
+UNIX Specification and GNU Standard for Command Line Interfaces is provided
+in Appendix A.</p>
+
+
+<h1>Model and Terminology</h1>
+
+<p>
+<em>Command line</em> is an array of character strings and not just
+a string with spaces between words as some people tend to think.</p>
+
+<p>
+Each string in a command line array is referred to as <em>argument
+</em>. First argument usually contains a string that refers to an executable.
+</p>
+
+<p>
+Interpretation of arguments is completely up to a program logic however
+conventions exist that vary among different systems. Usually groups of
+arguments are translated into a higher-level objects such as commands,
+options, and operands. These objects form a model for command line processing.
+All of them are defined below.</p>
+
+
+<p>
+<em>Command</em> is usually a word, or a single letter that represents
+a command to the program logic. Neither Single UNIX Specification nor GNU
+Standard for Command Line Interfaces has the notion of a command. Other terms
+for command include <em>action</em> and <em>function</em>. Command is usually
+(but not necessarily) the first argument after executable name. Here are few
+examples:</p>
+
+<p><code>tar x</code></p>
+
+<p class="indent">
+Here we have a one letter command <code>'x'</code> (extract). In GNU tar
+manual it is called <em>functional letter</em>.</p>
+
+<p><code>tar xvf</code></p>
+
+<p class="indent">
+Here we have three commands encoded as a single letter each. Actually
+semantically only <code>'x'</code> is a command while <code>'v'</code>
+(verbose) and <code>'f'</code> (read from a file) are options.</p>
+
+<p><code>openssl req</code></p>
+
+<p class="indent">
+Here we have a word command <code>'req'</code> (operations with certificate
+requests).</p>
+
+<p><code>cvs checkout foo</code></p>
+
+<p class="indent">
+Here we have a word command <code>'checkout'</code> and command operand
+<code>foo</code>.</p>
+
+
+<p><code>tar --help</code></p>
+
+<p class="indent">
+Even though <code>'--help'</code> is usually considered to be an option
+semantically it is a command.</p>
+
+
+<p>
+<em>Option</em> consists of <em>option name</em> and optionally
+one or more <em>option values</em>. Options are usually optional.
+Non-optional options are usually better represented by commands or operands.
+</p>
+
+<p>Option name usually takes up one argument. Option names usually start with
+a prefix (e.g. <code>'--compile-only'</code>, <code>'-c'</code> or <code>'/c'
+</code>). This helps distinguish them from commands and operands. Option name
+may have aliases (e.g. for option name <code>'--output-dir'</code> there could
+be an <code>'-o'</code> alias).</p>
+
+<p>
+Option without a value is alway optional and represents an option with implied
+binary value (e.g. {0, 1} or {false, true} etc.). Such option is sometimes
+called <em>flag</em>.</p>
+
+<p>
+Option can be associated with a program or a command. Thus the concept of
+option can be further refined to <em>program option</em> and <em>
+command option</em>. Program option alters behavior of the program as a
+whole while command option is only affecting particular command.</p>
+
+
+<p>Following are some examples:</p>
+
+<p><code>g++ -o hello.o hello.cpp</code></p>
+
+<p class="indent">
+Here we have an option with name <code>'-o'</code> which has a value
+<code>'hello.o'</code>. <code>'hello.cpp'</code> is an operand.</p>
+
+
+<p><code>ls -l</code></p>
+
+<p class="indent">Here we have a flag with name <code>'-l'</code>.</p>
+
+<p>
+<code>foo --bar=a,b,c</code><br/>
+<code>foo -b "a,b,c"</code><br/>
+<code>foo /baz a b c</code>
+</p>
+
+<p class="indent">
+Here we have a more elaborate example of a multi-format option. It has
+a name <code>'--bar'</code> and two aliases: <code>'-b'</code> and
+<code>'/baz'</code>. It also has three values (in our case they are
+<code>'a'</code>, <code>'b'</code>, and <code>'c'</code>).</p>
+
+<p><code>cvs -z 6 checkout -P foo</code></p>
+
+<p class="indent">
+Here we have a program option with name <code>'-z'</code> and value
+<code>'6'</code> (set compression level to be 6). <code>'checkout'</code>
+is a command. <code>-P</code> is a command flag (prune empty directories).
+<code>'foo'</code> is a command operand.</p>
+
+<p>
+<em>operand</em> usually represents an input value or a parameter.
+Operands can be mandatory or optional. Interpretation of operands is usually
+application-specific.</p>
+
+<p>
+Same as with option the concept of operand can be further refined to
+<em>program operand</em> and <em>command operand</em>.</p>
+
+<h1>Appendix A: Terms Translation</h1>
+
+<table summary="Terms Translation"
+ border="1"
+ cellspacing="0"
+ cellpadding="4"
+ class="center">
+
+ <col width="34%" />
+ <col width="33%" />
+ <col width="33%" />
+
+ <tr>
+ <th>Term</th>
+ <th>Single UNIX Specification</th>
+ <th>GNU</th>
+ </tr>
+ <tr>
+ <td>command line</td>
+ <td>command line</td>
+ <td>command line</td>
+ </tr>
+ <tr>
+ <td>argument</td>
+ <td>argument</td>
+ <td>argument</td>
+ </tr>
+ <tr>
+ <td>command</td>
+ <td>--</td>
+ <td>--</td>
+ </tr>
+ <tr>
+ <td>option</td>
+ <td>--</td>
+ <td>option</td>
+ </tr>
+ <tr>
+ <td>option name</td>
+ <td>option</td>
+ <td>name</td>
+ </tr>
+ <tr>
+ <td>option value</td>
+ <td>option-argument</td>
+ <td>--</td>
+ </tr>
+ <tr>
+ <td>program option</td>
+ <td>--</td>
+ <td>--</td>
+ </tr>
+ <tr>
+ <td>command option</td>
+ <td>--</td>
+ <td>--</td>
+ </tr>
+ <tr>
+ <td>operand</td>
+ <td>operand</td>
+ <td>argument</td>
+ </tr>
+ <tr>
+ <td>program operand</td>
+ <td>--</td>
+ <td>--</td>
+ </tr>
+ <tr>
+ <td>command operand</td>
+ <td>--</td>
+ <td>--</td>
+ </tr>
+</table>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/CommandLine/Thoughts b/ACE/contrib/utility/Documentation/CommandLine/Thoughts
new file mode 100644
index 00000000000..a10675f5945
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/CommandLine/Thoughts
@@ -0,0 +1,8 @@
+
+@@ I should not assume that Utility::CommandLine is the only mechanism
+ used to parse command line. Application developer may be using
+ different components that employ different command line parsers.
+ Thus it seem to me that I should use argv/argc as input/output
+ format.
+
+$Id$
diff --git a/ACE/contrib/utility/Documentation/CommandLine/index.xhtml b/ACE/contrib/utility/Documentation/CommandLine/index.xhtml
new file mode 100644
index 00000000000..7caf91689aa
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/CommandLine/index.xhtml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/CommandLine/index.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Command Line Processing Library</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="commandline,command,line,option,argument,parameter,operand,argc,argv"/>
+ <meta name="description" content="Command Line Processing Library"/>
+
+ <link rel="stylesheet" type="text/css" href="../Style/Default.css"/>
+
+</head>
+
+<body>
+
+<h1>Introduction</h1>
+
+<p>
+Command Line Processing library is in early development stage. You may want
+to take a look at <a href="Terminology.xhtml">Command Line Processing Model
+and Terminology</a> page.
+</p>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ExH/Compound.hpp.html b/ACE/contrib/utility/Documentation/ExH/Compound.hpp.html
new file mode 100644
index 00000000000..b8996f89552
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/Compound.hpp.html
@@ -0,0 +1,50 @@
+<html>
+<head>
+<!-- Generated by the Spirit (http://spirit.sf.net) C++ to HTML Converter -->
+<title>
+Compound.hpp</title>
+<link rel="stylesheet" href="../../Documentation/Style/CXX.css" type="text/css"></head>
+<body>
+<pre>
+<span class=comment>// file : Utility/ExH/Compound.hpp
+// author : Boris Kolpackov &lt;boris@kolpackov.net&gt;
+// copyright : Copyright (c) 2002-2003 Boris Kolpackov
+// license : http://kolpackov.net/license.html
+
+</span><span class=keyword>namespace </span><span class=identifier>Utility
+</span><span class=special>{
+ </span><span class=keyword>namespace </span><span class=identifier>ExH
+ </span><span class=special>{
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>Type</span><span class=special>, </span><span class=keyword>typename </span><span class=identifier>Base</span><span class=special>&gt;
+ </span><span class=keyword>class </span><span class=identifier>Compound </span><span class=special>: </span><span class=keyword>public </span><span class=keyword>virtual </span><span class=identifier>Base
+ </span><span class=special>{
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=keyword>explicit
+ </span><span class=identifier>Compound </span><span class=special>(</span><span class=keyword>char </span><span class=keyword>const</span><span class=special>* </span><span class=identifier>description</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>explicit
+ </span><span class=identifier>Compound </span><span class=special>(</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>description</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>&gt;
+ </span><span class=keyword>explicit
+ </span><span class=identifier>Compound </span><span class=special>(</span><span class=identifier>T </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>description</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=identifier>Compound </span><span class=special>(</span><span class=identifier>Compound </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>src</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>virtual
+ </span><span class=special>~</span><span class=identifier>Compound </span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=identifier>Compound</span><span class=special>&amp;
+ </span><span class=keyword>operator</span><span class=special>= </span><span class=special>(</span><span class=identifier>Compound </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>src</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>protected</span><span class=special>:
+ </span><span class=identifier>Compound </span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+ </span><span class=special>};
+ </span><span class=special>}
+</span><span class=special>}
+
+</span></pre>
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ExH/Example/Makefile b/ACE/contrib/utility/Documentation/ExH/Example/Makefile
new file mode 100644
index 00000000000..e0188a81fbf
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/Example/Makefile
@@ -0,0 +1,26 @@
+# file : Documentation/ExH/Example/Makefile
+# author : Boris Kolpackov <boris@kolpackov.net>
+# copyright : Copyright (c) 2002-2003 Boris Kolpackov
+# license : http://kolpackov.net/license.html
+
+root := ../../..
+
+include $(root)/BuildRules/Bootstrap.rules
+
+$(call include, $(root)/BuildRules/Documentation.pre.rules)
+
+vpath %.cpp $(root)/Example/ExH/BadCast
+vpath %.cpp $(root)/Example/ExH/Compound
+vpath %.cpp $(root)/Example/ExH/HelloWorld
+vpath %.cpp $(root)/Example/ExH/LogicToSystem
+
+doc_translation_units := bad_cast.cpp \
+ compound.cpp \
+ hello_world.cpp \
+ logic_to_system.cpp
+
+DOC_FLAGS := -css $(root)/Documentation/Style/CXX.css
+
+$(call include, $(root)/BuildRules/Documentation.post.rules)
+
+# $Id$
diff --git a/ACE/contrib/utility/Documentation/ExH/Example/bad_cast.cpp.html b/ACE/contrib/utility/Documentation/ExH/Example/bad_cast.cpp.html
new file mode 100644
index 00000000000..ba5044e358a
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/Example/bad_cast.cpp.html
@@ -0,0 +1,63 @@
+<html>
+<head>
+<!-- Generated by the Spirit (http://spirit.sf.net) C++ to HTML Converter -->
+<title>
+bad_cast.cpp</title>
+<link rel="stylesheet" href="../../../Documentation/Style/CXX.css" type="text/css"></head>
+<body>
+<pre>
+<span class=comment>// file : Example/ExH/BadCast/bad_cast.cpp
+// author : Boris Kolpackov &lt;boris@kolpackov.net&gt;
+// copyright : Copyright (c) 2002-2003 Boris Kolpackov
+// license : http://kolpackov.net/license.html
+
+</span><span class=preprocessor>#include &quot;Utility/ExH/System/Exception.hpp&quot;
+
+</span><span class=preprocessor>#include &lt;iostream&gt;
+
+</span><span class=keyword>using </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>cerr</span><span class=special>;
+</span><span class=keyword>using </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>endl</span><span class=special>;
+
+
+</span><span class=keyword>struct </span><span class=identifier>A
+</span><span class=special>{
+ </span><span class=keyword>virtual
+ </span><span class=special>~</span><span class=identifier>A</span><span class=special>() </span><span class=special>{}
+</span><span class=special>};
+
+</span><span class=keyword>struct </span><span class=identifier>B
+</span><span class=special>{
+ </span><span class=keyword>void
+ </span><span class=identifier>foo </span><span class=special>() </span><span class=special>{}
+</span><span class=special>};
+
+</span><span class=keyword>void
+</span><span class=identifier>foo </span><span class=special>() </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Utility</span><span class=special>::</span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>System</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>)
+</span><span class=special>{
+ </span><span class=identifier>A </span><span class=identifier>a</span><span class=special>;
+
+ </span><span class=identifier>A</span><span class=special>&amp; </span><span class=identifier>ar </span><span class=special>(</span><span class=identifier>a</span><span class=special>);
+
+ </span><span class=identifier>B</span><span class=special>&amp; </span><span class=identifier>br </span><span class=special>(</span><span class=keyword>dynamic_cast</span><span class=special>&lt;</span><span class=identifier>B</span><span class=special>&amp;&gt; </span><span class=special>(</span><span class=identifier>ar</span><span class=special>));
+
+ </span><span class=identifier>br</span><span class=special>.</span><span class=identifier>foo </span><span class=special>();
+</span><span class=special>}
+
+</span><span class=keyword>int
+</span><span class=identifier>main </span><span class=special>()
+</span><span class=special>{
+ </span><span class=keyword>try
+ </span><span class=special>{
+ </span><span class=identifier>foo </span><span class=special>();
+ </span><span class=special>}
+ </span><span class=keyword>catch </span><span class=special>(</span><span class=identifier>Utility</span><span class=special>::</span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>System</span><span class=special>::</span><span class=identifier>Exception </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>ex</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=identifier>cerr </span><span class=special>&lt;&lt; </span><span class=string>&quot;Caught Utility::ExH::System::Exception: &quot;
+ </span><span class=special>&lt;&lt; </span><span class=identifier>ex</span><span class=special>.</span><span class=identifier>what </span><span class=special>()
+ </span><span class=special>&lt;&lt; </span><span class=identifier>endl</span><span class=special>;
+ </span><span class=special>}
+</span><span class=special>}
+</span></pre>
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ExH/Example/compound.cpp.html b/ACE/contrib/utility/Documentation/ExH/Example/compound.cpp.html
new file mode 100644
index 00000000000..40ecf71eee9
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/Example/compound.cpp.html
@@ -0,0 +1,153 @@
+<html>
+<head>
+<!-- Generated by the Spirit (http://spirit.sf.net) C++ to HTML Converter -->
+<title>
+compound.cpp</title>
+<link rel="stylesheet" href="../../../Documentation/Style/CXX.css" type="text/css"></head>
+<body>
+<pre>
+<span class=comment>// file : Example/ExH/Compound/compound.cpp
+// author : Boris Kolpackov &lt;boris@kolpackov.net&gt;
+// copyright : Copyright (c) 2002-2003 Boris Kolpackov
+// license : http://kolpackov.net/license.html
+
+</span><span class=preprocessor>#include &quot;Utility/ExH/Compound.hpp&quot;
+</span><span class=preprocessor>#include &quot;Utility/ExH/System/Exception.hpp&quot;
+</span><span class=preprocessor>#include &quot;Utility/ExH/Logic/DescriptiveException.hpp&quot;
+
+</span><span class=comment>// Include some helper converters to allow exception initialization
+// with std::ostringstream
+
+</span><span class=preprocessor>#include &quot;Utility/ExH/StringStreamConverter.hpp&quot;
+
+</span><span class=preprocessor>#include &lt;iostream&gt;
+
+</span><span class=keyword>using </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>cerr</span><span class=special>;
+</span><span class=keyword>using </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>endl</span><span class=special>;
+</span><span class=keyword>using </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>;
+</span><span class=keyword>using </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>ostringstream</span><span class=special>;
+
+</span><span class=keyword>using </span><span class=keyword>namespace </span><span class=identifier>Utility</span><span class=special>::</span><span class=identifier>ExH</span><span class=special>;
+
+</span><span class=comment>// Here are our components
+
+</span><span class=keyword>class </span><span class=identifier>Base
+</span><span class=special>{
+</span><span class=keyword>public</span><span class=special>:
+
+ </span><span class=comment>//
+ // Exception definitions.
+ //
+
+ // Base logic exception class for component.
+ </span><span class=keyword>class </span><span class=identifier>Exception_ </span><span class=special>{};
+ </span><span class=keyword>typedef
+ </span><span class=identifier>Compound </span><span class=special>&lt;</span><span class=identifier>Exception_</span><span class=special>, </span><span class=identifier>Logic</span><span class=special>::</span><span class=identifier>DescriptiveException</span><span class=special>&gt;
+ </span><span class=identifier>Exception</span><span class=special>;
+
+ </span><span class=keyword>class </span><span class=identifier>InvalidArgument_ </span><span class=special>{};
+ </span><span class=keyword>typedef
+ </span><span class=identifier>Compound </span><span class=special>&lt;</span><span class=identifier>InvalidArgument_</span><span class=special>, </span><span class=identifier>Exception</span><span class=special>&gt;
+ </span><span class=identifier>InvalidArgument</span><span class=special>;
+
+ </span><span class=keyword>class </span><span class=identifier>NotInitialized_ </span><span class=special>{};
+ </span><span class=keyword>typedef
+ </span><span class=identifier>Compound </span><span class=special>&lt;</span><span class=identifier>NotInitialized_</span><span class=special>, </span><span class=identifier>Exception</span><span class=special>&gt;
+ </span><span class=identifier>NotInitialized</span><span class=special>;
+
+</span><span class=keyword>public</span><span class=special>:
+
+ </span><span class=keyword>void
+ </span><span class=identifier>foo </span><span class=special>(</span><span class=keyword>char </span><span class=keyword>const</span><span class=special>* </span><span class=identifier>str</span><span class=special>) </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>InvalidArgument</span><span class=special>, </span><span class=identifier>NotInitialized</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=comment>// This is just an example.
+
+ </span><span class=keyword>if </span><span class=special>(</span><span class=identifier>str </span><span class=special>== </span><span class=number>0</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=keyword>throw </span><span class=identifier>InvalidArgument </span><span class=special>(</span><span class=string>&quot;Base::foo: first parameter is zero.&quot;</span><span class=special>);
+ </span><span class=special>}
+ </span><span class=keyword>else
+ </span><span class=special>{
+ </span><span class=identifier>ostringstream </span><span class=identifier>ostr</span><span class=special>;
+ </span><span class=identifier>ostr </span><span class=special>&lt;&lt; </span><span class=string>&quot;Base::foo [this = &quot; </span><span class=special>&lt;&lt; </span><span class=keyword>this </span><span class=special>&lt;&lt; </span><span class=string>&quot;]: object is not initialized.&quot;</span><span class=special>;
+
+ </span><span class=keyword>throw </span><span class=identifier>NotInitialized </span><span class=special>(</span><span class=identifier>ostr</span><span class=special>);
+ </span><span class=special>}
+ </span><span class=special>}
+
+
+ </span><span class=comment>// We don't know what implementation may decide to throw so
+ // we allow to throw System exception and any logic exception
+ // derived from Base::Exception
+ </span><span class=keyword>virtual </span><span class=keyword>void
+ </span><span class=identifier>vfoo </span><span class=special>() </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>System</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>) </span><span class=special>= </span><span class=number>0</span><span class=special>;
+</span><span class=special>};
+
+</span><span class=keyword>class </span><span class=identifier>Derived </span><span class=special>: </span><span class=keyword>public </span><span class=identifier>Base
+</span><span class=special>{
+</span><span class=keyword>public</span><span class=special>:
+
+ </span><span class=comment>// Define some Derived-specific logic exception.
+ </span><span class=keyword>class </span><span class=identifier>NotImplemented_ </span><span class=special>{};
+ </span><span class=keyword>typedef
+ </span><span class=identifier>Compound </span><span class=special>&lt;</span><span class=identifier>NotImplemented_</span><span class=special>, </span><span class=identifier>Exception</span><span class=special>&gt;
+ </span><span class=identifier>NotImplemented</span><span class=special>;
+
+</span><span class=keyword>public</span><span class=special>:
+ </span><span class=keyword>virtual </span><span class=keyword>void
+ </span><span class=identifier>vfoo </span><span class=special>() </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>NotImplemented</span><span class=special>, </span><span class=identifier>System</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string </span><span class=identifier>str </span><span class=special>(</span><span class=string>&quot;Derived::vfoo: not implemented yet.&quot;</span><span class=special>);
+ </span><span class=keyword>throw </span><span class=identifier>NotImplemented </span><span class=special>(</span><span class=identifier>str</span><span class=special>);
+ </span><span class=special>}
+</span><span class=special>};
+
+</span><span class=keyword>int
+</span><span class=identifier>main </span><span class=special>()
+</span><span class=special>{
+ </span><span class=keyword>try
+ </span><span class=special>{
+
+ </span><span class=identifier>Derived </span><span class=identifier>d</span><span class=special>;
+ </span><span class=identifier>Base</span><span class=special>* </span><span class=identifier>pb </span><span class=special>(&amp;</span><span class=identifier>d</span><span class=special>);
+
+ </span><span class=comment>// We can use generic handler.
+ </span><span class=keyword>try
+ </span><span class=special>{
+ </span><span class=identifier>pb</span><span class=special>-&gt;</span><span class=identifier>vfoo </span><span class=special>();
+ </span><span class=special>}
+ </span><span class=keyword>catch </span><span class=special>(</span><span class=identifier>Base</span><span class=special>::</span><span class=identifier>Exception </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>ex</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=identifier>cerr </span><span class=special>&lt;&lt; </span><span class=string>&quot;Caught Base::Exception: &quot; </span><span class=special>&lt;&lt; </span><span class=identifier>ex</span><span class=special>.</span><span class=identifier>what </span><span class=special>() </span><span class=special>&lt;&lt; </span><span class=identifier>endl</span><span class=special>;
+ </span><span class=special>}
+
+
+ </span><span class=comment>// Or use more precise control.
+ </span><span class=keyword>try
+ </span><span class=special>{
+ </span><span class=identifier>pb</span><span class=special>-&gt;</span><span class=identifier>foo </span><span class=special>(</span><span class=string>&quot;hello&quot;</span><span class=special>);
+ </span><span class=special>}
+ </span><span class=keyword>catch </span><span class=special>(</span><span class=identifier>Base</span><span class=special>::</span><span class=identifier>NotInitialized </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>ex</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=identifier>cerr </span><span class=special>&lt;&lt; </span><span class=string>&quot;Caught Base::NotInitialized: &quot; </span><span class=special>&lt;&lt; </span><span class=identifier>ex</span><span class=special>.</span><span class=identifier>what </span><span class=special>() </span><span class=special>&lt;&lt; </span><span class=identifier>endl</span><span class=special>;
+ </span><span class=special>}
+
+ </span><span class=comment>// Or use application-level handler.
+ </span><span class=identifier>pb</span><span class=special>-&gt;</span><span class=identifier>foo </span><span class=special>(</span><span class=number>0</span><span class=special>);
+
+ </span><span class=special>}
+ </span><span class=keyword>catch </span><span class=special>(</span><span class=identifier>Logic</span><span class=special>::</span><span class=identifier>Exception </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>ex</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=identifier>cerr </span><span class=special>&lt;&lt; </span><span class=string>&quot;Caught Logic::Exception: &quot; </span><span class=special>&lt;&lt; </span><span class=identifier>ex</span><span class=special>.</span><span class=identifier>what </span><span class=special>() </span><span class=special>&lt;&lt; </span><span class=identifier>endl</span><span class=special>;
+ </span><span class=special>}
+ </span><span class=keyword>catch </span><span class=special>(...)
+ </span><span class=special>{
+ </span><span class=identifier>cerr </span><span class=special>&lt;&lt; </span><span class=string>&quot;Caught unknown exception using catch-all handler&quot; </span><span class=special>&lt;&lt; </span><span class=identifier>endl</span><span class=special>;
+ </span><span class=keyword>return </span><span class=special>-</span><span class=number>1</span><span class=special>;
+ </span><span class=special>}
+
+</span><span class=special>}
+</span></pre>
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ExH/Example/hello_world.cpp.html b/ACE/contrib/utility/Documentation/ExH/Example/hello_world.cpp.html
new file mode 100644
index 00000000000..3d2497f325e
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/Example/hello_world.cpp.html
@@ -0,0 +1,152 @@
+<html>
+<head>
+<!-- Generated by the Spirit (http://spirit.sf.net) C++ to HTML Converter -->
+<title>
+hello_world.cpp</title>
+<link rel="stylesheet" href="../../../Documentation/Style/CXX.css" type="text/css"></head>
+<body>
+<pre>
+<span class=comment>// file : Example/ExH/HelloWorld/hello_world.cpp
+// author : Boris Kolpackov &lt;boris@kolpackov.net&gt;
+// copyright : Copyright (c) 2002-2003 Boris Kolpackov
+// license : http://kolpackov.net/license.html
+
+</span><span class=preprocessor>#include &lt;cstdlib&gt; // for std::abort ()
+
+</span><span class=preprocessor>#include &lt;string&gt;
+</span><span class=preprocessor>#include &lt;iostream&gt;
+
+</span><span class=preprocessor>#include &quot;Utility/ExH/System/Exception.hpp&quot;
+</span><span class=preprocessor>#include &quot;Utility/ExH/Logic/Exception.hpp&quot;
+
+</span><span class=keyword>using </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>cerr</span><span class=special>;
+</span><span class=keyword>using </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>cout</span><span class=special>;
+</span><span class=keyword>using </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>endl</span><span class=special>;
+
+</span><span class=keyword>using </span><span class=keyword>namespace </span><span class=identifier>Utility</span><span class=special>;
+
+</span><span class=keyword>class </span><span class=identifier>Application
+</span><span class=special>{
+</span><span class=keyword>public</span><span class=special>:
+ </span><span class=keyword>class </span><span class=identifier>Exception </span><span class=special>: </span><span class=keyword>public </span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>Logic</span><span class=special>::</span><span class=identifier>Exception </span><span class=special>{};
+
+ </span><span class=comment>// Hint: you may want to try again...
+ </span><span class=keyword>class </span><span class=identifier>FeelingDizzy </span><span class=special>: </span><span class=keyword>public </span><span class=identifier>Exception </span><span class=special>{};
+
+ </span><span class=keyword>class </span><span class=identifier>InvalidArg </span><span class=special>: </span><span class=keyword>public </span><span class=identifier>Exception </span><span class=special>{};
+
+</span><span class=keyword>public</span><span class=special>:
+ </span><span class=identifier>Application </span><span class=special>() </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>System</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>)
+ </span><span class=special>: </span><span class=comment>// The std::string c-tor may throw any kind of exceptions besides
+ // quite possible std::bad_alloc.
+ </span><span class=identifier>greeting_ </span><span class=special>(</span><span class=string>&quot;Hello, world!&quot;</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=special>}
+
+ </span><span class=identifier>Application </span><span class=special>(</span><span class=keyword>char </span><span class=keyword>const </span><span class=special>* </span><span class=identifier>greeting</span><span class=special>) </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>InvalidArg</span><span class=special>,
+ </span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>System</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>)
+ </span><span class=special>: </span><span class=identifier>greeting_ </span><span class=special>(</span><span class=identifier>greeting </span><span class=special>== </span><span class=number>0 </span><span class=special>? </span><span class=string>&quot;&quot; </span><span class=special>: </span><span class=identifier>greeting</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=keyword>if </span><span class=special>(</span><span class=identifier>greeting </span><span class=special>== </span><span class=number>0</span><span class=special>) </span><span class=keyword>throw </span><span class=identifier>InvalidArg </span><span class=special>();
+ </span><span class=special>}
+
+</span><span class=keyword>public</span><span class=special>:
+
+ </span><span class=keyword>void
+ </span><span class=identifier>run </span><span class=special>() </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>FeelingDizzy</span><span class=special>, </span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>System</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=keyword>static </span><span class=keyword>unsigned </span><span class=keyword>int </span><span class=identifier>dizzy_count </span><span class=special>(</span><span class=number>0</span><span class=special>);
+
+ </span><span class=keyword>if </span><span class=special>(</span><span class=identifier>dizzy_count</span><span class=special>++ </span><span class=special>&lt; </span><span class=number>5</span><span class=special>) </span><span class=keyword>throw </span><span class=identifier>FeelingDizzy </span><span class=special>();
+
+ </span><span class=comment>// The next line can throw full bucket of exceptions
+ // not to mention ios_base::failure.
+ </span><span class=identifier>cout </span><span class=special>&lt;&lt; </span><span class=identifier>greeting_</span><span class=special>.</span><span class=identifier>c_str </span><span class=special>() </span><span class=special>&lt;&lt; </span><span class=identifier>endl</span><span class=special>;
+ </span><span class=special>}
+
+</span><span class=keyword>private</span><span class=special>:
+
+ </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string </span><span class=identifier>greeting_</span><span class=special>;
+</span><span class=special>};
+
+
+
+</span><span class=keyword>int
+</span><span class=identifier>main </span><span class=special>()
+</span><span class=special>{
+ </span><span class=comment>// This is a catch-all layer that should be in use only
+ // if we are really in trouble.
+ </span><span class=keyword>try
+ </span><span class=special>{
+ </span><span class=comment>// This is a catch-system layer. Here we will catch exceptions like
+ // bad_alloc, etc. If we get here it means that nobody wanted/managed
+ // to recover from this kind of errors.
+ </span><span class=keyword>try
+ </span><span class=special>{
+ </span><span class=comment>// This is a catch-logic layer. If we get here it usually
+ // indicates an application logic error.
+ </span><span class=keyword>try
+ </span><span class=special>{
+
+ </span><span class=comment>// Ok, here we go about our application logic.
+ </span><span class=keyword>try
+ </span><span class=special>{
+ </span><span class=keyword>for </span><span class=special>(</span><span class=keyword>int </span><span class=identifier>i </span><span class=special>= </span><span class=number>0</span><span class=special>; </span><span class=identifier>i </span><span class=special>&lt; </span><span class=number>10</span><span class=special>; </span><span class=identifier>i</span><span class=special>++)
+ </span><span class=special>{
+ </span><span class=keyword>try
+ </span><span class=special>{
+ </span><span class=identifier>Application </span><span class=identifier>app </span><span class=special>(</span><span class=string>&quot;Hi dude!&quot;</span><span class=special>);
+ </span><span class=identifier>app</span><span class=special>.</span><span class=identifier>run </span><span class=special>();
+ </span><span class=keyword>break</span><span class=special>;
+ </span><span class=special>}
+ </span><span class=keyword>catch </span><span class=special>(</span><span class=identifier>Application</span><span class=special>::</span><span class=identifier>FeelingDizzy </span><span class=keyword>const</span><span class=special>&amp; </span><span class=special>)
+ </span><span class=special>{
+ </span><span class=keyword>if </span><span class=special>(</span><span class=identifier>i </span><span class=special>== </span><span class=number>9</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=identifier>cerr </span><span class=special>&lt;&lt; </span><span class=string>&quot;Given up!&quot; </span><span class=special>&lt;&lt; </span><span class=identifier>endl</span><span class=special>;
+ </span><span class=keyword>return </span><span class=special>-</span><span class=number>1</span><span class=special>;
+ </span><span class=special>}
+ </span><span class=keyword>else
+ </span><span class=special>{
+ </span><span class=identifier>cerr </span><span class=special>&lt;&lt; </span><span class=string>&quot;Application is feeling dizzy. Trying again...&quot;
+ </span><span class=special>&lt;&lt; </span><span class=identifier>endl</span><span class=special>;
+ </span><span class=special>}
+ </span><span class=special>}
+ </span><span class=special>}
+ </span><span class=special>}
+ </span><span class=keyword>catch </span><span class=special>(</span><span class=identifier>Application</span><span class=special>::</span><span class=identifier>InvalidArg </span><span class=keyword>const</span><span class=special>&amp; </span><span class=special>)
+ </span><span class=special>{
+ </span><span class=identifier>cerr </span><span class=special>&lt;&lt; </span><span class=string>&quot;Cought Application::InvalidArg : ...hmm... strange!&quot;
+ </span><span class=special>&lt;&lt; </span><span class=identifier>endl</span><span class=special>;
+ </span><span class=keyword>return </span><span class=special>-</span><span class=number>1</span><span class=special>;
+ </span><span class=special>}
+ </span><span class=special>}
+ </span><span class=keyword>catch </span><span class=special>(</span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>Logic</span><span class=special>::</span><span class=identifier>Exception </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>e</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=identifier>cerr </span><span class=special>&lt;&lt; </span><span class=string>&quot;Caught Logic::Exception : &quot; </span><span class=special>&lt;&lt; </span><span class=identifier>e</span><span class=special>.</span><span class=identifier>what </span><span class=special>() </span><span class=special>&lt;&lt; </span><span class=identifier>endl</span><span class=special>;
+ </span><span class=keyword>return </span><span class=special>-</span><span class=number>1</span><span class=special>;
+ </span><span class=special>}
+ </span><span class=special>}
+ </span><span class=keyword>catch </span><span class=special>(</span><span class=keyword>const </span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>System</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>&amp; </span><span class=identifier>e</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=identifier>cerr </span><span class=special>&lt;&lt; </span><span class=string>&quot;Caught System::Exception : &quot; </span><span class=special>&lt;&lt; </span><span class=identifier>e</span><span class=special>.</span><span class=identifier>what </span><span class=special>() </span><span class=special>&lt;&lt; </span><span class=identifier>endl</span><span class=special>;
+ </span><span class=keyword>return </span><span class=special>-</span><span class=number>1</span><span class=special>;
+ </span><span class=special>}
+ </span><span class=keyword>catch </span><span class=special>(...)
+ </span><span class=special>{
+ </span><span class=identifier>cerr </span><span class=special>&lt;&lt; </span><span class=string>&quot;Caught unknown exception using catch-all handler. &quot; </span><span class=special>&lt;&lt; </span><span class=identifier>endl</span><span class=special>;
+ </span><span class=keyword>return </span><span class=special>-</span><span class=number>1</span><span class=special>;
+ </span><span class=special>}
+ </span><span class=special>}
+ </span><span class=keyword>catch </span><span class=special>(...)
+ </span><span class=special>{
+ </span><span class=comment>// We get here in cases of some hard failure. For example when handling
+ // exception, operator &lt;&lt; throws another exception. Usually application
+ // cannot handle such failures itself so we just propagate it futher.
+ </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>abort </span><span class=special>();
+ </span><span class=special>}
+</span><span class=special>}
+</span></pre>
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ExH/Example/logic_to_system.cpp.html b/ACE/contrib/utility/Documentation/ExH/Example/logic_to_system.cpp.html
new file mode 100644
index 00000000000..d29794d4c2c
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/Example/logic_to_system.cpp.html
@@ -0,0 +1,69 @@
+<html>
+<head>
+<!-- Generated by the Spirit (http://spirit.sf.net) C++ to HTML Converter -->
+<title>
+logic_to_system.cpp</title>
+<link rel="stylesheet" href="../../../Documentation/Style/CXX.css" type="text/css"></head>
+<body>
+<pre>
+<span class=comment>// file : Example/ExH/LogicToSystem/logic_to_system.cpp
+// author : Boris Kolpackov &lt;boris@kolpackov.net&gt;
+// copyright : Copyright (c) 2002-2003 Boris Kolpackov
+// license : http://kolpackov.net/license.html
+
+</span><span class=preprocessor>#include &quot;Utility/ExH/System/Exception.hpp&quot;
+</span><span class=preprocessor>#include &quot;Utility/ExH/Logic/Exception.hpp&quot;
+
+</span><span class=preprocessor>#include &lt;iostream&gt;
+
+</span><span class=keyword>using </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>cerr</span><span class=special>;
+</span><span class=keyword>using </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>endl</span><span class=special>;
+
+
+</span><span class=keyword>struct </span><span class=identifier>SubsystemA
+</span><span class=special>{
+ </span><span class=keyword>class </span><span class=identifier>Exception </span><span class=special>: </span><span class=keyword>public </span><span class=identifier>Utility</span><span class=special>::</span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>Logic</span><span class=special>::</span><span class=identifier>Exception </span><span class=special>{};
+
+ </span><span class=keyword>void
+ </span><span class=identifier>foo </span><span class=special>() </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Exception</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=keyword>throw </span><span class=identifier>Exception </span><span class=special>();
+ </span><span class=special>}
+</span><span class=special>};
+
+
+</span><span class=keyword>struct </span><span class=identifier>SubsystemB
+</span><span class=special>{
+ </span><span class=keyword>void
+ </span><span class=identifier>foo </span><span class=special>() </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Utility</span><span class=special>::</span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>System</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=identifier>SubsystemA </span><span class=identifier>a</span><span class=special>;
+ </span><span class=identifier>a</span><span class=special>.</span><span class=identifier>foo </span><span class=special>();
+
+ </span><span class=comment>// Here SubsystemB is using SunsystemA but cannot (forgot, doesnt't
+ // want to, doesn't know how to, etc - pick your favorite) handle
+ // exception thrown by SubsystemA. As a result exception is
+ // 'converted' to System::Exception.
+ </span><span class=special>}
+</span><span class=special>};
+
+
+</span><span class=keyword>int
+</span><span class=identifier>main </span><span class=special>()
+</span><span class=special>{
+ </span><span class=keyword>try
+ </span><span class=special>{
+ </span><span class=identifier>SubsystemB </span><span class=identifier>b</span><span class=special>;
+ </span><span class=identifier>b</span><span class=special>.</span><span class=identifier>foo </span><span class=special>();
+ </span><span class=special>}
+ </span><span class=keyword>catch </span><span class=special>(</span><span class=identifier>Utility</span><span class=special>::</span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>System</span><span class=special>::</span><span class=identifier>Exception </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>ex</span><span class=special>)
+ </span><span class=special>{
+ </span><span class=identifier>cerr </span><span class=special>&lt;&lt; </span><span class=string>&quot;Caught Utility::ExH::System::Exception: &quot;
+ </span><span class=special>&lt;&lt; </span><span class=identifier>ex</span><span class=special>.</span><span class=identifier>what </span><span class=special>()
+ </span><span class=special>&lt;&lt; </span><span class=identifier>endl</span><span class=special>;
+ </span><span class=special>}
+</span><span class=special>}
+</span></pre>
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ExH/Logic/DescriptiveException.hpp.html b/ACE/contrib/utility/Documentation/ExH/Logic/DescriptiveException.hpp.html
new file mode 100644
index 00000000000..b54dbd30936
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/Logic/DescriptiveException.hpp.html
@@ -0,0 +1,61 @@
+<html>
+<head>
+<!-- Generated by the Spirit (http://spirit.sf.net) C++ to HTML Converter -->
+<title>
+DescriptiveException.hpp</title>
+<link rel="stylesheet" href="../../../Documentation/Style/CXX.css" type="text/css"></head>
+<body>
+<pre>
+<span class=comment>// file : Utility/ExH/Logic/DescriptiveException.hpp
+// author : Boris Kolpackov &lt;boris@kolpackov.net&gt;
+// copyright : Copyright (c) 2002-2003 Boris Kolpackov
+// license : http://kolpackov.net/license.html
+
+</span><span class=keyword>namespace </span><span class=identifier>Utility
+</span><span class=special>{
+ </span><span class=keyword>namespace </span><span class=identifier>ExH
+ </span><span class=special>{
+ </span><span class=keyword>namespace </span><span class=identifier>Logic
+ </span><span class=special>{
+ </span><span class=keyword>class </span><span class=identifier>DescriptiveException </span><span class=special>: </span><span class=keyword>public </span><span class=keyword>virtual </span><span class=identifier>Exception
+ </span><span class=special>{
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=keyword>explicit
+ </span><span class=identifier>DescriptiveException </span><span class=special>(</span><span class=keyword>char </span><span class=keyword>const</span><span class=special>* </span><span class=identifier>description</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>explicit
+ </span><span class=identifier>DescriptiveException </span><span class=special>(</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>description</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>&gt;
+ </span><span class=keyword>explicit
+ </span><span class=identifier>DescriptiveException </span><span class=special>(</span><span class=identifier>T </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>description</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=identifier>DescriptiveException </span><span class=special>(</span><span class=identifier>DescriptiveException </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>src</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>virtual
+ </span><span class=special>~</span><span class=identifier>DescriptiveException </span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=identifier>DescriptiveException</span><span class=special>&amp;
+ </span><span class=keyword>operator</span><span class=special>= </span><span class=special>(</span><span class=identifier>DescriptiveException </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>src</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>protected</span><span class=special>:
+ </span><span class=identifier>DescriptiveException </span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>void
+ </span><span class=identifier>init </span><span class=special>(</span><span class=keyword>char </span><span class=keyword>const</span><span class=special>* </span><span class=identifier>description</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=keyword>virtual </span><span class=keyword>char </span><span class=keyword>const</span><span class=special>*
+ </span><span class=identifier>what </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>private</span><span class=special>:
+ </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>auto_ptr</span><span class=special>&lt;</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>&gt; </span><span class=identifier>description_</span><span class=special>;
+ </span><span class=special>};
+ </span><span class=special>}
+ </span><span class=special>}
+</span><span class=special>}
+
+</span></pre>
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ExH/Logic/Exception.hpp.html b/ACE/contrib/utility/Documentation/ExH/Logic/Exception.hpp.html
new file mode 100644
index 00000000000..5b4b56aa46d
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/Logic/Exception.hpp.html
@@ -0,0 +1,43 @@
+<html>
+<head>
+<!-- Generated by the Spirit (http://spirit.sf.net) C++ to HTML Converter -->
+<title>
+Exception.hpp</title>
+<link rel="stylesheet" href="../../../Documentation/Style/CXX.css" type="text/css"></head>
+<body>
+<pre>
+<span class=comment>// file : Utility/ExH/Logic/Exception.hpp
+// author : Boris Kolpackov &lt;boris@kolpackov.net&gt;
+// copyright : Copyright (c) 2002-2003 Boris Kolpackov
+// license : http://kolpackov.net/license.html
+
+</span><span class=keyword>namespace </span><span class=identifier>Utility
+</span><span class=special>{
+ </span><span class=keyword>namespace </span><span class=identifier>ExH
+ </span><span class=special>{
+ </span><span class=keyword>namespace </span><span class=identifier>Logic
+ </span><span class=special>{
+
+ </span><span class=comment>// Logic::Exception inherits from System::Exception for the
+ // following reason. Semantically for some part of the
+ // system particular instance of Logic::Exception may seem as
+ // opaque System::Exception and the only way to handle it would
+ // be to propagate it further. In other words Logic::Exception
+ // can be seemlesly &quot;converted&quot; to System::Exception if there is
+ // no part of the system interested in handling it.
+ //
+
+ </span><span class=keyword>class </span><span class=identifier>Exception </span><span class=special>: </span><span class=keyword>public </span><span class=keyword>virtual </span><span class=identifier>System</span><span class=special>::</span><span class=identifier>Exception
+ </span><span class=special>{
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=keyword>virtual
+ </span><span class=special>~</span><span class=identifier>Exception </span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+ </span><span class=special>};
+ </span><span class=special>}
+ </span><span class=special>}
+</span><span class=special>}
+
+</span></pre>
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ExH/Logic/Makefile b/ACE/contrib/utility/Documentation/ExH/Logic/Makefile
new file mode 100644
index 00000000000..d2d48d406bf
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/Logic/Makefile
@@ -0,0 +1,20 @@
+# file : Documentation/ExH/Logic/Makefile
+# author : Boris Kolpackov <boris@kolpackov.net>
+# copyright : Copyright (c) 2002-2003 Boris Kolpackov
+# license : http://kolpackov.net/license.html
+
+root := ../../..
+
+include $(root)/BuildRules/Bootstrap.rules
+
+$(call include, $(root)/BuildRules/Documentation.pre.rules)
+
+vpath %.hpp $(root)/Utility/ExH/Logic
+
+doc_translation_units := Exception.hpp DescriptiveException.hpp
+
+DOC_FLAGS := --strip-preprocessor -css $(root)/Documentation/Style/CXX.css
+
+$(call include, $(root)/BuildRules/Documentation.post.rules)
+
+# $Id$
diff --git a/ACE/contrib/utility/Documentation/ExH/Makefile b/ACE/contrib/utility/Documentation/ExH/Makefile
new file mode 100644
index 00000000000..c4a5bc5f6c0
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/Makefile
@@ -0,0 +1,16 @@
+# file : Documentation/ExH/Makefile
+# author : Boris Kolpackov <boris@kolpackov.net>
+# copyright : Copyright (c) 2002-2003 Boris Kolpackov
+# license : http://kolpackov.net/license.html
+
+root := ../..
+
+include $(root)/BuildRules/Bootstrap.rules
+
+$(call include, $(root)/BuildRules/Recursion.pre.rules)
+
+target_makefile_list := Makefile.documentation
+target_directory_list := Logic System Example
+
+$(call include, $(root)/BuildRules/Recursion.post.rules)
+# $Id$
diff --git a/ACE/contrib/utility/Documentation/ExH/Makefile.documentation b/ACE/contrib/utility/Documentation/ExH/Makefile.documentation
new file mode 100644
index 00000000000..3ebf1511555
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/Makefile.documentation
@@ -0,0 +1,20 @@
+# file : Documentation/ExH/Make.doc.mk
+# author : Boris Kolpackov <boris@kolpackov.net>
+# copyright : Copyright (c) 2002-2003 Boris Kolpackov
+# license : http://kolpackov.net/license.html
+
+root := ../..
+
+include $(root)/BuildRules/Bootstrap.rules
+
+$(call include, $(root)/BuildRules/Documentation.pre.rules)
+
+vpath %.hpp $(root)/Utility/ExH
+
+doc_translation_units := Compound.hpp
+
+DOC_FLAGS := --strip-preprocessor -css $(root)/Documentation/Style/CXX.css
+
+$(call include, $(root)/BuildRules/Documentation.post.rules)
+
+# $Id$
diff --git a/ACE/contrib/utility/Documentation/ExH/News.xhtml b/ACE/contrib/utility/Documentation/ExH/News.xhtml
new file mode 100644
index 00000000000..b86f821c992
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/News.xhtml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/ExH/News.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Exception Handling Library News</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="news,C++,exception,handling,model"/>
+ <meta name="description" content="Exception Handling Library News"/>
+
+ <link rel="stylesheet" type="text/css" href="../Style/Default.css"/>
+
+</head>
+
+<body>
+
+<h1>1.2.0</h1>
+
+<ul class="multiline">
+ <li>
+ Fixed incorrect initialization of <code>DescriptiveException</code> with
+ <code>std::ostringstream</code> object. Thanks to Karen Aroutiounov
+ &lt;karen@ipmce.ru&gt; for reporting this.
+ </li>
+</ul>
+
+<h1>1.1.0</h1>
+
+<ul class="multiline">
+ <li>New regression test coverage.</li>
+</ul>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ExH/System/DescriptiveException.hpp.html b/ACE/contrib/utility/Documentation/ExH/System/DescriptiveException.hpp.html
new file mode 100644
index 00000000000..fb6b35d4143
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/System/DescriptiveException.hpp.html
@@ -0,0 +1,64 @@
+<html>
+<head>
+<!-- Generated by the Spirit (http://spirit.sf.net) C++ to HTML Converter -->
+<title>
+DescriptiveException.hpp</title>
+<link rel="stylesheet" href="../../../Documentation/Style/CXX.css" type="text/css"></head>
+<body>
+<pre>
+<span class=comment>// file : Utility/ExH/System/DescriptiveException.hpp
+// author : Boris Kolpackov &lt;boris@kolpackov.net&gt;
+// copyright : Copyright (c) 2002-2003 Boris Kolpackov
+// license : http://kolpackov.net/license.html
+
+</span><span class=keyword>namespace </span><span class=identifier>Utility
+</span><span class=special>{
+ </span><span class=keyword>namespace </span><span class=identifier>ExH
+ </span><span class=special>{
+ </span><span class=keyword>namespace </span><span class=identifier>System
+ </span><span class=special>{
+ </span><span class=keyword>class </span><span class=identifier>DescriptiveException </span><span class=special>: </span><span class=keyword>public </span><span class=keyword>virtual </span><span class=identifier>Exception
+ </span><span class=special>{
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=keyword>explicit
+ </span><span class=identifier>DescriptiveException </span><span class=special>(</span><span class=keyword>char </span><span class=keyword>const</span><span class=special>* </span><span class=identifier>description</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>explicit
+ </span><span class=identifier>DescriptiveException </span><span class=special>(</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>description</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>&gt;
+ </span><span class=keyword>explicit
+ </span><span class=identifier>DescriptiveException </span><span class=special>(</span><span class=identifier>T </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>description</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=identifier>DescriptiveException </span><span class=special>(</span><span class=identifier>DescriptiveException </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>src</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>virtual
+ </span><span class=special>~</span><span class=identifier>DescriptiveException </span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=identifier>DescriptiveException</span><span class=special>&amp;
+ </span><span class=keyword>operator</span><span class=special>= </span><span class=special>(</span><span class=identifier>DescriptiveException </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>src</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>protected</span><span class=special>:
+ </span><span class=identifier>DescriptiveException </span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>void
+ </span><span class=identifier>init </span><span class=special>(</span><span class=keyword>char </span><span class=keyword>const</span><span class=special>* </span><span class=identifier>description</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=keyword>virtual </span><span class=keyword>char </span><span class=keyword>const</span><span class=special>*
+ </span><span class=identifier>what </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>private</span><span class=special>:
+
+ </span><span class=keyword>static </span><span class=keyword>unsigned </span><span class=keyword>long </span><span class=keyword>const </span><span class=identifier>DESCRIPTION_SIZE </span><span class=special>= </span><span class=number>256</span><span class=special>;
+
+ </span><span class=keyword>char </span><span class=identifier>description_ </span><span class=special>[</span><span class=identifier>DESCRIPTION_SIZE</span><span class=special>];
+ </span><span class=special>};
+ </span><span class=special>}
+ </span><span class=special>}
+</span><span class=special>}
+
+</span></pre>
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ExH/System/Exception.hpp.html b/ACE/contrib/utility/Documentation/ExH/System/Exception.hpp.html
new file mode 100644
index 00000000000..60d6bd733f5
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/System/Exception.hpp.html
@@ -0,0 +1,32 @@
+<html>
+<head>
+<!-- Generated by the Spirit (http://spirit.sf.net) C++ to HTML Converter -->
+<title>
+Exception.hpp</title>
+<link rel="stylesheet" href="../../../Documentation/Style/CXX.css" type="text/css"></head>
+<body>
+<pre>
+<span class=comment>// file : Utility/ExH/System/Exception.hpp
+// author : Boris Kolpackov &lt;boris@kolpackov.net&gt;
+// copyright : Copyright (c) 2002-2003 Boris Kolpackov
+// license : http://kolpackov.net/license.html
+
+</span><span class=keyword>namespace </span><span class=identifier>Utility
+</span><span class=special>{
+ </span><span class=keyword>namespace </span><span class=identifier>ExH
+ </span><span class=special>{
+ </span><span class=keyword>namespace </span><span class=identifier>System
+ </span><span class=special>{
+ </span><span class=comment>// This is the only way to make predefined exceptions like
+ // std::bad_alloc, etc to appear in the right place of the hierarchy.
+ //
+
+ </span><span class=keyword>typedef </span><span class=identifier>std</span><span class=special>::</span><span class=identifier>exception </span><span class=identifier>Exception</span><span class=special>;
+ </span><span class=special>}
+ </span><span class=special>}
+</span><span class=special>}
+
+</span></pre>
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ExH/System/Makefile b/ACE/contrib/utility/Documentation/ExH/System/Makefile
new file mode 100644
index 00000000000..7c7bfbc8e8d
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/System/Makefile
@@ -0,0 +1,20 @@
+# file : Documentation/ExH/System/Makefile
+# author : Boris Kolpackov <boris@kolpackov.net>
+# copyright : Copyright (c) 2002-2003 Boris Kolpackov
+# license : http://kolpackov.net/license.html
+
+root := ../../..
+
+include $(root)/BuildRules/Bootstrap.rules
+
+$(call include, $(root)/BuildRules/Documentation.pre.rules)
+
+vpath %.hpp $(root)/Utility/ExH/System
+
+doc_translation_units := Exception.hpp DescriptiveException.hpp
+
+DOC_FLAGS := --strip-preprocessor -css $(root)/Documentation/Style/CXX.css
+
+$(call include, $(root)/BuildRules/Documentation.post.rules)
+
+# $Id$
diff --git a/ACE/contrib/utility/Documentation/ExH/index.xhtml b/ACE/contrib/utility/Documentation/ExH/index.xhtml
new file mode 100644
index 00000000000..c2d40d9fbaa
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ExH/index.xhtml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/ExH/index.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Exception Handling Library</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="C++,utility,exception,handling,model,ExH"/>
+ <meta name="description" content="Exception Handling Library"/>
+
+ <link rel="stylesheet" type="text/css" href="../Style/Default.css"/>
+
+</head>
+
+<body>
+
+<h1>Introduction</h1>
+
+<p>
+Exception Handling library was designed to promote consistent usage of
+exceptions and exception handling mechanisms throughout the project.
+For a quick overview of the basic idea you may want to look at some
+examples.</p>
+
+<h1>Examples</h1>
+
+<ul class="menu">
+ <li><a href="Example/bad_cast.cpp.html">bad_cast.cpp</a></li>
+ <li><a href="Example/compound.cpp.html">compound.cpp</a></li>
+ <li><a href="Example/hello_world.cpp.html">hello_world.cpp</a></li>
+ <li><a href="Example/logic_to_system.cpp.html">logic_to_system.cpp</a></li>
+</ul>
+
+<h1>Definitions</h1>
+
+<p>Following are the definitions of the main blocks of the model:</p>
+
+<ul class="menu">
+ <li><a href="Compound.hpp.html">ExH::Compound</a></li>
+ <li><a href="System/Exception.hpp.html">ExH::System::Exception</a></li>
+ <li><a href="System/DescriptiveException.hpp.html">ExH::System::DescriptiveException</a></li>
+ <li><a href="Logic/Exception.hpp.html">ExH::Logic::Exception</a></li>
+ <li><a href="Logic/DescriptiveException.hpp.html">ExH::Logic::DescriptiveException</a></li>
+</ul>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/Hetero/News.xhtml b/ACE/contrib/utility/Documentation/Hetero/News.xhtml
new file mode 100644
index 00000000000..b99645d704d
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Hetero/News.xhtml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/Hetero/News.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Heterogeneous Container Library News</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="c++,heterogeneous,container,news"/>
+ <meta name="description" content="Heterogeneous Container Library News"/>
+
+ <link rel="stylesheet" type="text/css" href="../Style/Default.css"/>
+
+</head>
+
+<body>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/Hetero/index.xhtml b/ACE/contrib/utility/Documentation/Hetero/index.xhtml
new file mode 100644
index 00000000000..d45a7b6e82d
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Hetero/index.xhtml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/Hetero/index.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Heterogeneous Container Library</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="c++,heterogeneous,container"/>
+ <meta name="description" content="Heterogeneous Container Library"/>
+
+ <link rel="stylesheet" type="text/css" href="../Style/Default.css"/>
+
+</head>
+
+<body>
+
+<h1>Introduction</h1>
+
+<p>Have you ever wanted to write something like this:</p>
+
+<pre>
+vector v;
+
+v.push_back (10);
+v.push_back (true);
+v.push_back ("hello");
+</pre>
+
+<p>Or maybe even something like this:</p>
+
+<pre>
+template &lt;typename T&gt;
+void print (T const&amp; t)
+{
+ cout &lt;&lt; t &lt;&lt; endl;
+}
+
+for (vector::const_iterator i = v.begin (); i != v.end (); i++)
+{
+ print (*i);
+}
+</pre>
+
+<p>If so then you may be interested in Heterogeneous Container Library.
+It is still in active development but you can take a look for some
+examples in Example/Hetero directory.</p>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/Introspection/News.xhtml b/ACE/contrib/utility/Documentation/Introspection/News.xhtml
new file mode 100644
index 00000000000..257c790766c
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Introspection/News.xhtml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/Introspection/News.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Introspection Library News</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="introspection,library,news"/>
+ <meta name="description" content="Introspection Library News"/>
+
+ <link rel="stylesheet" type="text/css" href="../Style/Default.css"/>
+
+</head>
+
+<body>
+
+<h1>1.2.2</h1>
+<ul class="multiline">
+ <li>
+ Removed no-throw specification from <code>Introspection::Object::~Object()</code>.
+ </li>
+</ul>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/Introspection/index.xhtml b/ACE/contrib/utility/Documentation/Introspection/index.xhtml
new file mode 100644
index 00000000000..462b2c87321
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Introspection/index.xhtml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/Introspection/index.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Introspection Library</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="c++,type,object,class,introspection"/>
+ <meta name="description" content="Introspection Library"/>
+
+ <link rel="stylesheet" type="text/css" href="../Style/Default.css"/>
+
+</head>
+
+<body>
+
+<h1>Introduction</h1>
+
+<p>
+Sometimes there is a need to analyze object's type at runtime. ISO C++
+provides some capabilities for this kind of introspection however they
+are limited to basic type information. Such information as type
+inheritance graph is not accessible in standard C++. Introspection
+Library provides a framework that enables discovery of type structure
+at runtime. The library is still in development stage but a few meaningful
+examples are available in Example/Introspection directory.</p>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/Makefile b/ACE/contrib/utility/Documentation/Makefile
new file mode 100644
index 00000000000..6a2caae9002
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Makefile
@@ -0,0 +1,16 @@
+# file : Documentation/Makefile
+# author : Boris Kolpackov <boris@kolpackov.net>
+# copyright : Copyright (c) 2002-2003 Boris Kolpackov
+# license : http://kolpackov.net/license.html
+
+root := ..
+
+include $(root)/BuildRules/Bootstrap.rules
+
+$(call include, $(root)/BuildRules/Recursion.pre.rules)
+
+target_makefile_list :=
+target_directory_list := ExH ReferenceCounting Synch
+
+$(call include, $(root)/BuildRules/Recursion.post.rules)
+# $Id$
diff --git a/ACE/contrib/utility/Documentation/News.xhtml b/ACE/contrib/utility/Documentation/News.xhtml
new file mode 100644
index 00000000000..b3ea1389e53
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/News.xhtml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/News.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Utility Library News</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="news,C++,utility,exception,handling,model,reference,counting,thread,synchronization"/>
+ <meta name="description" content="Utility Library News"/>
+
+ <link rel="stylesheet" type="text/css" href="Style/Default.css"/>
+
+</head>
+
+<body>
+
+<h1>Sub-Library News</h1>
+
+<ul class="menu">
+ <li><a href="ExH/News.xhtml">Exception Handling</a></li>
+ <li><a href="ReferenceCounting/News.xhtml">Reference Counting</a></li>
+ <li><a href="Synch/News.xhtml">Synchronization</a></li>
+ <li><a href="Introspection/News.xhtml">Introspection</a></li>
+</ul>
+
+<h1>1.2.2</h1>
+<ul class="multiline">
+ <li>Bug fixes in build system.</li>
+</ul>
+
+
+<h1>1.2.1</h1>
+<ul class="multiline">
+ <li>
+ Documentation bug fixes.
+ </li>
+</ul>
+
+
+<h1>1.2.0</h1>
+<ul class="multiline">
+ <li>
+ Added new <a href="Hetero/index.xhtml">Heterogeneous Container Library</a>.
+ </li>
+ <li>
+ Added new <a href="Introspection/index.xhtml">Introspection Library</a>.
+ </li>
+</ul>
+
+
+<h1>1.1.0</h1>
+<ul class="multiline">
+ <li>New directory structure.</li>
+ <li>New dependency generation mechanism.</li>
+ <li>Automatic documentation generation (<code>make documentation</code>).</li>
+</ul>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ReferenceCounting/DefaultImpl.hpp.html b/ACE/contrib/utility/Documentation/ReferenceCounting/DefaultImpl.hpp.html
new file mode 100644
index 00000000000..86edcd70ec2
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ReferenceCounting/DefaultImpl.hpp.html
@@ -0,0 +1,93 @@
+<html>
+<head>
+<!-- Generated by the Spirit (http://spirit.sf.net) C++ to HTML Converter -->
+<title>
+DefaultImpl.hpp</title>
+<link rel="stylesheet" href="../../Documentation/Style/CXX.css" type="text/css"></head>
+<body>
+<pre>
+<span class=comment>// file : Utility/ReferenceCounting/DefaultImpl.hpp
+// author : Boris Kolpackov &lt;boris@kolpackov.net&gt;
+// copyright : Copyright (c) 2002-2003 Boris Kolpackov
+// license : http://kolpackov.net/license.html
+
+</span><span class=keyword>namespace </span><span class=identifier>Utility
+</span><span class=special>{
+ </span><span class=keyword>namespace </span><span class=identifier>ReferenceCounting
+ </span><span class=special>{
+ </span><span class=comment>// Default reference counter implementation with parameterised
+ // synchronization policy. It is assumed that none of the SynchPolicy
+ // types throw any logic exceptions. If in fact they do then these
+ // exceptions won't be handled and will be automatically converted
+ // to system exceptions.
+
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>SynchPolicy </span><span class=special>= </span><span class=identifier>Utility</span><span class=special>::</span><span class=identifier>Synch</span><span class=special>::</span><span class=identifier>Policy</span><span class=special>::</span><span class=identifier>Null</span><span class=special>&gt;
+ </span><span class=keyword>class </span><span class=identifier>DefaultImpl </span><span class=special>: </span><span class=keyword>public </span><span class=keyword>virtual </span><span class=identifier>Interface
+ </span><span class=special>{
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=keyword>class </span><span class=identifier>InconsistentState_ </span><span class=special>{};
+ </span><span class=keyword>typedef
+ </span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>Compound</span><span class=special>&lt;</span><span class=identifier>InconsistentState_</span><span class=special>, </span><span class=identifier>Exception</span><span class=special>&gt;
+ </span><span class=identifier>InconsistentState</span><span class=special>;
+
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=identifier>DefaultImpl </span><span class=special>() </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>SystemException</span><span class=special>);
+
+ </span><span class=keyword>virtual
+ </span><span class=special>~</span><span class=identifier>DefaultImpl </span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=keyword>virtual </span><span class=keyword>void
+ </span><span class=identifier>add_ref </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>SystemException</span><span class=special>);
+
+ </span><span class=keyword>virtual </span><span class=keyword>void
+ </span><span class=identifier>remove_ref </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>virtual </span><span class=identifier>count_t
+ </span><span class=identifier>refcount_value </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>SystemException</span><span class=special>);
+
+ </span><span class=keyword>protected</span><span class=special>:
+ </span><span class=keyword>virtual </span><span class=keyword>void
+ </span><span class=identifier>add_ref_i </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>SystemException</span><span class=special>);
+
+ </span><span class=keyword>virtual </span><span class=keyword>bool
+ </span><span class=identifier>remove_ref_i </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>SystemException</span><span class=special>);
+
+ </span><span class=keyword>virtual </span><span class=identifier>count_t
+ </span><span class=identifier>refcount_value_i </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>SystemException</span><span class=special>);
+
+ </span><span class=keyword>typename </span><span class=identifier>SynchPolicy</span><span class=special>::</span><span class=identifier>Mutex</span><span class=special>&amp;
+ </span><span class=identifier>lock_i </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>protected</span><span class=special>:
+ </span><span class=keyword>typedef
+ </span><span class=keyword>typename </span><span class=identifier>SynchPolicy</span><span class=special>::</span><span class=identifier>Mutex
+ </span><span class=identifier>Mutex_</span><span class=special>;
+
+ </span><span class=keyword>typedef
+ </span><span class=keyword>typename </span><span class=identifier>SynchPolicy</span><span class=special>::</span><span class=identifier>ReadGuard
+ </span><span class=identifier>ReadGuard_</span><span class=special>;
+
+ </span><span class=keyword>typedef
+ </span><span class=keyword>typename </span><span class=identifier>SynchPolicy</span><span class=special>::</span><span class=identifier>WriteGuard
+ </span><span class=identifier>WriteGuard_</span><span class=special>;
+
+ </span><span class=keyword>protected</span><span class=special>:
+ </span><span class=keyword>mutable </span><span class=identifier>count_t </span><span class=identifier>ref_count_</span><span class=special>;
+
+ </span><span class=keyword>private</span><span class=special>:
+ </span><span class=keyword>mutable </span><span class=identifier>Mutex_ </span><span class=identifier>lock_</span><span class=special>;
+
+ </span><span class=keyword>private</span><span class=special>:
+ </span><span class=comment>// Copy semanic is not supported.
+ </span><span class=identifier>DefaultImpl </span><span class=special>(</span><span class=identifier>DefaultImpl </span><span class=keyword>const</span><span class=special>&amp;) </span><span class=keyword>throw </span><span class=special>();
+ </span><span class=identifier>DefaultImpl</span><span class=special>&amp;
+ </span><span class=keyword>operator</span><span class=special>= </span><span class=special>(</span><span class=identifier>DefaultImpl </span><span class=keyword>const</span><span class=special>&amp;) </span><span class=keyword>throw </span><span class=special>();
+ </span><span class=special>};
+ </span><span class=special>}
+</span><span class=special>}
+
+</span></pre>
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ReferenceCounting/Interface.hpp.html b/ACE/contrib/utility/Documentation/ReferenceCounting/Interface.hpp.html
new file mode 100644
index 00000000000..f81c1dc737c
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ReferenceCounting/Interface.hpp.html
@@ -0,0 +1,82 @@
+<html>
+<head>
+<!-- Generated by the Spirit (http://spirit.sf.net) C++ to HTML Converter -->
+<title>
+Interface.hpp</title>
+<link rel="stylesheet" href="../../Documentation/Style/CXX.css" type="text/css"></head>
+<body>
+<pre>
+<span class=comment>// file : Utility/ReferenceCounting/Interface.hpp
+// author : Boris Kolpackov &lt;boris@kolpackov.net&gt;
+// copyright : Copyright (c) 2002-2003 Boris Kolpackov
+// license : http://kolpackov.net/license.html
+
+</span><span class=keyword>namespace </span><span class=identifier>Utility
+</span><span class=special>{
+ </span><span class=keyword>namespace </span><span class=identifier>ReferenceCounting
+ </span><span class=special>{
+ </span><span class=comment>// Interface to a reference-countable object. Note that _remove_ref ()
+ // member function has a no-throw semantic. Even though it can lead to
+ // a diagnostic loss it was made no-throw because it has a destructor
+ // semantic.
+
+ </span><span class=keyword>class </span><span class=identifier>Interface
+ </span><span class=special>{
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=keyword>typedef
+ </span><span class=keyword>unsigned </span><span class=keyword>long
+ </span><span class=identifier>count_t</span><span class=special>;
+
+ </span><span class=keyword>typedef
+ </span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>System</span><span class=special>::</span><span class=identifier>Exception
+ </span><span class=identifier>SystemException</span><span class=special>;
+
+ </span><span class=keyword>class </span><span class=identifier>Exception_ </span><span class=special>{};
+ </span><span class=keyword>typedef
+ </span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>Compound</span><span class=special>&lt;</span><span class=identifier>Exception_</span><span class=special>, </span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>Logic</span><span class=special>::</span><span class=identifier>DescriptiveException</span><span class=special>&gt;
+ </span><span class=identifier>Exception</span><span class=special>;
+
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=keyword>virtual </span><span class=keyword>void
+ </span><span class=identifier>add_ref </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>SystemException</span><span class=special>) </span><span class=special>= </span><span class=number>0</span><span class=special>;
+
+ </span><span class=keyword>virtual </span><span class=keyword>void
+ </span><span class=identifier>remove_ref </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>() </span><span class=special>= </span><span class=number>0</span><span class=special>;
+
+ </span><span class=keyword>virtual </span><span class=identifier>count_t
+ </span><span class=identifier>refcount_value </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>SystemException</span><span class=special>) </span><span class=special>= </span><span class=number>0</span><span class=special>;
+
+ </span><span class=keyword>protected</span><span class=special>:
+ </span><span class=identifier>Interface </span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>virtual
+ </span><span class=special>~</span><span class=identifier>Interface </span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>protected</span><span class=special>:
+ </span><span class=keyword>virtual </span><span class=keyword>void
+ </span><span class=identifier>add_ref_i </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>SystemException</span><span class=special>) </span><span class=special>= </span><span class=number>0</span><span class=special>;
+
+ </span><span class=keyword>virtual </span><span class=keyword>bool
+ </span><span class=identifier>remove_ref_i </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>SystemException</span><span class=special>) </span><span class=special>= </span><span class=number>0</span><span class=special>;
+
+ </span><span class=keyword>virtual </span><span class=identifier>count_t
+ </span><span class=identifier>refcount_value_i </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>SystemException</span><span class=special>) </span><span class=special>= </span><span class=number>0</span><span class=special>;
+
+ </span><span class=keyword>private</span><span class=special>:
+ </span><span class=comment>// Copy semanic is not supported.
+ </span><span class=identifier>Interface </span><span class=special>(</span><span class=identifier>Interface </span><span class=keyword>const</span><span class=special>&amp;) </span><span class=keyword>throw </span><span class=special>();
+ </span><span class=identifier>Interface</span><span class=special>&amp;
+ </span><span class=keyword>operator</span><span class=special>= </span><span class=special>(</span><span class=identifier>Interface </span><span class=keyword>const</span><span class=special>&amp;) </span><span class=keyword>throw </span><span class=special>();
+ </span><span class=special>};
+
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>Type</span><span class=special>&gt;
+ </span><span class=identifier>Type</span><span class=special>*
+ </span><span class=identifier>add_ref </span><span class=special>(</span><span class=identifier>Type</span><span class=special>* </span><span class=identifier>ptr</span><span class=special>)
+ </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>SystemException</span><span class=special>);
+ </span><span class=special>}
+</span><span class=special>}
+
+</span></pre>
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ReferenceCounting/Makefile b/ACE/contrib/utility/Documentation/ReferenceCounting/Makefile
new file mode 100644
index 00000000000..3202f185418
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ReferenceCounting/Makefile
@@ -0,0 +1,22 @@
+# file : Documentation/ReferenceCounting/Make.doc.mk
+# author : Boris Kolpackov <boris@kolpackov.net>
+# copyright : Copyright (c) 2002-2003 Boris Kolpackov
+# license : http://kolpackov.net/license.html
+
+root := ../..
+
+include $(root)/BuildRules/Bootstrap.rules
+
+$(call include, $(root)/BuildRules/Documentation.pre.rules)
+
+vpath %.hpp $(root)/Utility/ReferenceCounting
+
+doc_translation_units := DefaultImpl.hpp \
+ Interface.hpp \
+ SmartPtr.hpp \
+ StrictPtr.hpp
+
+DOC_FLAGS := --strip-preprocessor -css $(root)/Documentation/Style/CXX.css
+
+$(call include, $(root)/BuildRules/Documentation.post.rules)
+# $Id$
diff --git a/ACE/contrib/utility/Documentation/ReferenceCounting/News.xhtml b/ACE/contrib/utility/Documentation/ReferenceCounting/News.xhtml
new file mode 100644
index 00000000000..472a97e9e66
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ReferenceCounting/News.xhtml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/ReferenceCounting/News.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Reference Counting Library News</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="news,C++,reference,counting,smart,pointer"/>
+ <meta name="description" content="Reference Counting Library News"/>
+
+ <link rel="stylesheet" type="text/css" href="../Style/Default.css"/>
+
+</head>
+
+<body>
+
+<h1>1.1.0</h1>
+<ul class="multiline">
+<li>New regression test coverage.</li>
+
+<li>
+<code>
+<a href="SmartPtr.hpp.html">Utility::ReferenceCounting::SmartPtr</a>
+</code>
+: added
+<pre class="cpp-code">
+template&lt;typename Other&gt;
+SmartPtr (SmartPtr&lt;Other&gt; const&amp;)
+</pre>
+and
+<pre class="cpp-code">
+template&lt;typename Other&gt;
+operator= (SmartPtr&lt;Other&gt; const&amp;)
+</pre>
+</li>
+
+<li>
+<code>
+<a href="SmartPtr.hpp.html">Utility::ReferenceCounting::SmartPtr</a>
+</code>
+: added
+<pre class="cpp-code">typedef T Type;</pre>
+in order to provide access to underlying type.
+</li>
+
+<li>
+<code><a href="index.xhtml">Utility::ReferenceCounting</a></code>
+: added
+<pre class="cpp-code">
+template &lt;typename D, typename S&gt;
+D*
+smart_cast (SmartPtr&lt;S&gt; const&amp;)
+</pre>
+to provide more convenient <code>dynamic_cast</code> functionality.
+</li>
+
+<li>
+<code><a href="index.xhtml">Utility::ReferenceCounting</a></code>
+: added
+<pre class="cpp-code">
+template &lt;typename T&gt;
+SmartPtr&lt;T&gt; acquire (T*)
+</pre>
+</li>
+
+<li>
+New
+<code>
+<a href="StrictPtr.hpp.html">Utility::ReferenceCounting::StrictPtr</a>
+</code>
+automatic pointer.
+</li>
+
+</ul>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ReferenceCounting/SmartPtr.hpp.html b/ACE/contrib/utility/Documentation/ReferenceCounting/SmartPtr.hpp.html
new file mode 100644
index 00000000000..a2ef9342441
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ReferenceCounting/SmartPtr.hpp.html
@@ -0,0 +1,103 @@
+<html>
+<head>
+<!-- Generated by the Spirit (http://spirit.sf.net) C++ to HTML Converter -->
+<title>
+SmartPtr.hpp</title>
+<link rel="stylesheet" href="../../Documentation/Style/CXX.css" type="text/css"></head>
+<body>
+<pre>
+<span class=comment>// file : Utility/ReferenceCounting/SmartPtr.hpp
+// author : Boris Kolpackov &lt;boris@kolpackov.net&gt;
+// copyright : Copyright (c) 2002-2003 Boris Kolpackov
+// license : http://kolpackov.net/license.html
+
+</span><span class=keyword>namespace </span><span class=identifier>Utility
+</span><span class=special>{
+ </span><span class=keyword>namespace </span><span class=identifier>ReferenceCounting
+ </span><span class=special>{
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>&gt;
+ </span><span class=keyword>class </span><span class=identifier>SmartPtr
+ </span><span class=special>{
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=keyword>typedef
+ </span><span class=identifier>T
+ </span><span class=identifier>Type</span><span class=special>;
+
+ </span><span class=keyword>class </span><span class=identifier>NotInitialized_ </span><span class=special>{};
+ </span><span class=keyword>typedef
+ </span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>Compound</span><span class=special>&lt;</span><span class=identifier>NotInitialized_</span><span class=special>, </span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>Logic</span><span class=special>::</span><span class=identifier>DescriptiveException</span><span class=special>&gt;
+ </span><span class=identifier>NotInitialized</span><span class=special>;
+
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=comment>// c-tor's
+
+ </span><span class=identifier>SmartPtr </span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+ </span><span class=identifier>SmartPtr </span><span class=special>(</span><span class=identifier>Type</span><span class=special>* </span><span class=identifier>ptr</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+ </span><span class=identifier>SmartPtr </span><span class=special>(</span><span class=identifier>SmartPtr</span><span class=special>&lt;</span><span class=identifier>Type</span><span class=special>&gt; </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>s_ptr</span><span class=special>)
+ </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>SystemException</span><span class=special>);
+
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>Other</span><span class=special>&gt;
+ </span><span class=identifier>SmartPtr </span><span class=special>(</span><span class=identifier>SmartPtr</span><span class=special>&lt;</span><span class=identifier>Other</span><span class=special>&gt; </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>s_ptr</span><span class=special>)
+ </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>SystemException</span><span class=special>);
+
+ </span><span class=comment>// d-tor
+
+ </span><span class=special>~</span><span class=identifier>SmartPtr </span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=comment>// assignment &amp; copy-assignment operators
+
+ </span><span class=identifier>SmartPtr</span><span class=special>&lt;</span><span class=identifier>Type</span><span class=special>&gt;&amp;
+ </span><span class=keyword>operator</span><span class=special>= </span><span class=special>(</span><span class=identifier>Type</span><span class=special>* </span><span class=identifier>ptr</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=identifier>SmartPtr</span><span class=special>&lt;</span><span class=identifier>Type</span><span class=special>&gt;&amp;
+ </span><span class=keyword>operator</span><span class=special>= </span><span class=special>(</span><span class=identifier>SmartPtr</span><span class=special>&lt;</span><span class=identifier>Type</span><span class=special>&gt; </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>s_ptr</span><span class=special>)
+ </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>SystemException</span><span class=special>);
+
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>Other</span><span class=special>&gt;
+ </span><span class=identifier>SmartPtr</span><span class=special>&lt;</span><span class=identifier>Type</span><span class=special>&gt;&amp;
+ </span><span class=keyword>operator</span><span class=special>= </span><span class=special>(</span><span class=identifier>SmartPtr</span><span class=special>&lt;</span><span class=identifier>Other</span><span class=special>&gt; </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>s_ptr</span><span class=special>)
+ </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>SystemException</span><span class=special>);
+
+ </span><span class=comment>//conversions
+
+ </span><span class=keyword>operator </span><span class=identifier>Type</span><span class=special>* </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=comment>// accessors
+
+ </span><span class=identifier>Type</span><span class=special>*
+ </span><span class=keyword>operator</span><span class=special>-&gt; </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>NotInitialized</span><span class=special>);
+
+ </span><span class=identifier>Type</span><span class=special>*
+ </span><span class=identifier>in </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=identifier>Type</span><span class=special>*
+ </span><span class=identifier>retn</span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>private</span><span class=special>:
+ </span><span class=identifier>Type</span><span class=special>* </span><span class=identifier>ptr_</span><span class=special>;
+ </span><span class=special>};
+
+ </span><span class=comment>// Specialization of add_ref function for SmartPtr&lt;T&gt;
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>&gt;
+ </span><span class=identifier>T</span><span class=special>*
+ </span><span class=identifier>add_ref </span><span class=special>(</span><span class=identifier>SmartPtr</span><span class=special>&lt;</span><span class=identifier>T</span><span class=special>&gt; </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>ptr</span><span class=special>)
+ </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>SystemException</span><span class=special>);
+
+
+ </span><span class=comment>// Dynamic type conversion function for SmartPtr's
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>D</span><span class=special>, </span><span class=keyword>typename </span><span class=identifier>S</span><span class=special>&gt;
+ </span><span class=identifier>D</span><span class=special>*
+ </span><span class=identifier>smart_cast </span><span class=special>(</span><span class=identifier>SmartPtr</span><span class=special>&lt;</span><span class=identifier>S</span><span class=special>&gt; </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>s</span><span class=special>)
+ </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>SystemException</span><span class=special>);
+
+ </span><span class=comment>// Acquisition function
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>&gt;
+ </span><span class=identifier>SmartPtr</span><span class=special>&lt;</span><span class=identifier>T</span><span class=special>&gt;
+ </span><span class=identifier>acquire </span><span class=special>(</span><span class=identifier>T</span><span class=special>* </span><span class=identifier>ptr</span><span class=special>) </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>SystemException</span><span class=special>);
+ </span><span class=special>}
+</span><span class=special>}
+
+</span></pre>
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ReferenceCounting/StrictPtr.hpp.html b/ACE/contrib/utility/Documentation/ReferenceCounting/StrictPtr.hpp.html
new file mode 100644
index 00000000000..13211b6e3c7
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ReferenceCounting/StrictPtr.hpp.html
@@ -0,0 +1,107 @@
+<html>
+<head>
+<!-- Generated by the Spirit (http://spirit.sf.net) C++ to HTML Converter -->
+<title>
+StrictPtr.hpp</title>
+<link rel="stylesheet" href="../../Documentation/Style/CXX.css" type="text/css"></head>
+<body>
+<pre>
+<span class=comment>// file : Utility/ReferenceCounting/StrictPtr.hpp
+// author : Boris Kolpackov &lt;boris@kolpackov.net&gt;
+// copyright : Copyright (c) 2002-2003 Boris Kolpackov
+// license : http://kolpackov.net/license.html
+
+</span><span class=keyword>namespace </span><span class=identifier>Utility
+</span><span class=special>{
+ </span><span class=keyword>namespace </span><span class=identifier>ReferenceCounting
+ </span><span class=special>{
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>&gt;
+ </span><span class=keyword>class </span><span class=identifier>StrictPtr
+ </span><span class=special>{
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=keyword>typedef
+ </span><span class=identifier>T
+ </span><span class=identifier>Type</span><span class=special>;
+
+ </span><span class=keyword>class </span><span class=identifier>NotInitialized_ </span><span class=special>{};
+ </span><span class=keyword>typedef
+ </span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>Compound</span><span class=special>&lt;</span><span class=identifier>NotInitialized_</span><span class=special>, </span><span class=identifier>ExH</span><span class=special>::</span><span class=identifier>Logic</span><span class=special>::</span><span class=identifier>DescriptiveException</span><span class=special>&gt;
+ </span><span class=identifier>NotInitialized</span><span class=special>;
+
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=comment>// c-tor's
+
+ </span><span class=identifier>StrictPtr </span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>explicit
+ </span><span class=identifier>StrictPtr </span><span class=special>(</span><span class=identifier>Type</span><span class=special>* </span><span class=identifier>ptr</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=identifier>StrictPtr </span><span class=special>(</span><span class=identifier>StrictPtr</span><span class=special>&lt;</span><span class=identifier>Type</span><span class=special>&gt; </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>s_ptr</span><span class=special>)
+ </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>SystemException</span><span class=special>);
+
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>Other</span><span class=special>&gt;
+ </span><span class=identifier>StrictPtr </span><span class=special>(</span><span class=identifier>StrictPtr</span><span class=special>&lt;</span><span class=identifier>Other</span><span class=special>&gt; </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>s_ptr</span><span class=special>)
+ </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>SystemException</span><span class=special>);
+ </span><span class=comment>// d-tor
+
+ </span><span class=special>~</span><span class=identifier>StrictPtr </span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=comment>// assignment &amp; copy-assignment operators
+
+ </span><span class=identifier>StrictPtr</span><span class=special>&lt;</span><span class=identifier>Type</span><span class=special>&gt;&amp;
+ </span><span class=keyword>operator</span><span class=special>= </span><span class=special>(</span><span class=identifier>Type</span><span class=special>* </span><span class=identifier>ptr</span><span class=special>) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=identifier>StrictPtr</span><span class=special>&lt;</span><span class=identifier>Type</span><span class=special>&gt;&amp;
+ </span><span class=keyword>operator</span><span class=special>= </span><span class=special>(</span><span class=identifier>StrictPtr</span><span class=special>&lt;</span><span class=identifier>Type</span><span class=special>&gt; </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>s_ptr</span><span class=special>)
+ </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>SystemException</span><span class=special>);
+
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>Other</span><span class=special>&gt;
+ </span><span class=identifier>StrictPtr</span><span class=special>&lt;</span><span class=identifier>Type</span><span class=special>&gt;&amp;
+ </span><span class=keyword>operator</span><span class=special>= </span><span class=special>(</span><span class=identifier>StrictPtr</span><span class=special>&lt;</span><span class=identifier>Other</span><span class=special>&gt; </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>s_ptr</span><span class=special>)
+ </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>SystemException</span><span class=special>);
+
+ </span><span class=comment>// conversions
+
+ // Note: implicit conversion (operator Type* ()) is not supported.
+
+ // comparison
+
+ </span><span class=keyword>bool
+ </span><span class=keyword>operator</span><span class=special>== </span><span class=special>(</span><span class=identifier>Type</span><span class=special>* </span><span class=identifier>other</span><span class=special>) </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>bool
+ </span><span class=keyword>operator</span><span class=special>!= </span><span class=special>(</span><span class=identifier>Type</span><span class=special>* </span><span class=identifier>other</span><span class=special>) </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=comment>// accessors
+
+ </span><span class=identifier>Type</span><span class=special>*
+ </span><span class=keyword>operator</span><span class=special>-&gt; </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>NotInitialized</span><span class=special>);
+
+ </span><span class=identifier>Type</span><span class=special>*
+ </span><span class=identifier>in </span><span class=special>() </span><span class=keyword>const </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=identifier>Type</span><span class=special>*
+ </span><span class=identifier>retn</span><span class=special>() </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>private</span><span class=special>:
+ </span><span class=identifier>Type</span><span class=special>* </span><span class=identifier>ptr_</span><span class=special>;
+ </span><span class=special>};
+
+ </span><span class=comment>// Specialization of add_ref function for StrictPtr&lt;T&gt;
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>&gt;
+ </span><span class=identifier>T</span><span class=special>*
+ </span><span class=identifier>add_ref </span><span class=special>(</span><span class=identifier>StrictPtr</span><span class=special>&lt;</span><span class=identifier>T</span><span class=special>&gt; </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>ptr</span><span class=special>)
+ </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>SystemException</span><span class=special>);
+
+ </span><span class=comment>// Dynamic type conversion function for StrictPtr's
+ </span><span class=keyword>template </span><span class=special>&lt;</span><span class=keyword>typename </span><span class=identifier>D</span><span class=special>, </span><span class=keyword>typename </span><span class=identifier>S</span><span class=special>&gt;
+ </span><span class=identifier>StrictPtr</span><span class=special>&lt;</span><span class=identifier>D</span><span class=special>&gt;
+ </span><span class=identifier>strict_cast </span><span class=special>(</span><span class=identifier>StrictPtr</span><span class=special>&lt;</span><span class=identifier>S</span><span class=special>&gt; </span><span class=keyword>const</span><span class=special>&amp; </span><span class=identifier>s</span><span class=special>)
+ </span><span class=keyword>throw </span><span class=special>(</span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>Exception</span><span class=special>, </span><span class=identifier>Interface</span><span class=special>::</span><span class=identifier>SystemException</span><span class=special>);
+ </span><span class=special>}
+</span><span class=special>}
+
+</span></pre>
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ReferenceCounting/index.xhtml b/ACE/contrib/utility/Documentation/ReferenceCounting/index.xhtml
new file mode 100644
index 00000000000..43ead969460
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ReferenceCounting/index.xhtml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/ReferenceCounting/index.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Reference Counting Library</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="C++,utility,reference,counting"/>
+ <meta name="description" content="Reference Counting Library"/>
+
+ <link rel="stylesheet" type="text/css" href="../Style/Default.css"/>
+
+</head>
+
+<body>
+
+<h1>Introduction</h1>
+
+<p>Reference Counting Library provides basic building blocks for
+reference-countable objects. Implementation is modeled after CORBA
+IDL-to-C++ mapping's reference-countable objects and significantly
+extended.</p>
+
+
+<h1>Definitions</h1>
+
+<p>Below are the definitions of the key classes:</p>
+
+<ul class="menu">
+ <li><a href="Interface.hpp.html">ReferenceCounting::Interface</a></li>
+ <li><a href="DefaultImpl.hpp.html">ReferenceCounting::DefaultImpl</a></li>
+ <li><a href="SmartPtr.hpp.html">ReferenceCounting::SmartPtr</a></li>
+ <li><a href="StrictPtr.hpp.html">ReferenceCounting::StrictPtr</a></li>
+</ul>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/ReleaseProcess b/ACE/contrib/utility/Documentation/ReleaseProcess
new file mode 100644
index 00000000000..9b42a762902
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/ReleaseProcess
@@ -0,0 +1,13 @@
+1) go thru '@@' in source code
+
+2) build & test with g++ and cxx
+
+3) update news pages
+
+4) spellcheck/tidy/validate all xhtml files
+
+5) copy Utility to Utility-x.y.z; make documentation
+
+6) go manually thru all documentation pages with lynx & gui ua
+
+$Id$
diff --git a/ACE/contrib/utility/Documentation/Style/CXX.css b/ACE/contrib/utility/Documentation/Style/CXX.css
new file mode 100644
index 00000000000..49bf0f34e51
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Style/CXX.css
@@ -0,0 +1,9 @@
+pre { BORDER-RIGHT: gray 1pt solid; PADDING-RIGHT: 2pt; BORDER-TOP: gray 1pt solid; DISPLAY: block; PADDING-LEFT: 2pt; PADDING-BOTTOM: 2pt; MARGIN-LEFT: 32pt; BORDER-LEFT: gray 1pt solid; MARGIN-RIGHT: 32pt; PADDING-TOP: 2pt; BORDER-BOTTOM: gray 1pt solid; FONT-FAMILY: "Courier New", Courier, mono; background-color: #EEEEEE; font-size: small}
+.keyword { color: #000099}
+.identifier { }
+.comment { color: #990000}
+.special { color: #800040}
+.preprocessor { color: #006600}
+.string { color: #666666}
+.number { color: #666666}
+/* $Id$ */
diff --git a/ACE/contrib/utility/Documentation/Style/CXX_Blue.css b/ACE/contrib/utility/Documentation/Style/CXX_Blue.css
new file mode 100644
index 00000000000..52b58d54119
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Style/CXX_Blue.css
@@ -0,0 +1,25 @@
+pre {
+ BORDER-RIGHT: gray 1pt solid;
+ PADDING-RIGHT: 2pt;
+ BORDER-TOP: gray 1pt solid;
+ DISPLAY: block;
+ PADDING-LEFT: 2pt;
+ PADDING-BOTTOM: 2pt;
+ MARGIN-LEFT: 32pt;
+ BORDER-LEFT: gray 1pt solid;
+ MARGIN-RIGHT: 32pt;
+ PADDING-TOP: 2pt;
+ BORDER-BOTTOM: gray 1pt solid;
+ FONT-FAMILY: "Courier New", Courier, mono; background-color: #191970;
+ font-size: small
+}
+
+.keyword { font-weight: bold; color: #afeeee}
+.identifier { color: #98fb98 }
+.comment { color: #add8e6}
+.special { color: #bebebe}
+.preprocessor { color: #7fffd4}
+.string { color: #87cefa}
+.number { color: #bebebe}
+.literal { color: #FF0000}
+/* $Id$ */
diff --git a/ACE/contrib/utility/Documentation/Style/Default.css b/ACE/contrib/utility/Documentation/Style/Default.css
new file mode 100644
index 00000000000..2c90197f340
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Style/Default.css
@@ -0,0 +1,45 @@
+body {
+ font-family : sans-serif;
+
+ color : black;
+ background : white;
+
+ max-width : 40em;
+ padding : 2em 2em 2em 3em;
+ margin : 0;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-family : sans-serif;
+ font-weight : 500;
+}
+
+h1 { font-size : 170%; }
+h2 { font-size : 145%; }
+h3 { font-size : 125%; }
+h4 { font-size : 110%; }
+h5 { font-size : 106%; }
+h6 { font-size : 100%; }
+
+p.indent {
+ margin-left : 1.5em;
+}
+
+/* list of links */
+
+ul.menu {
+ list-style-type : none;
+}
+
+ul.menu li {
+ padding-top : 0.3em;
+ padding-bottom : 0.3em;
+}
+
+/* */
+
+ul.multiline li {
+ padding-top : 0.4em;
+ padding-bottom : 0.4em;
+}
+/* $Id$ */
diff --git a/ACE/contrib/utility/Documentation/Synch/Makefile b/ACE/contrib/utility/Documentation/Synch/Makefile
new file mode 100644
index 00000000000..a35e28b530d
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Synch/Makefile
@@ -0,0 +1,16 @@
+# file : Documentation/Synch/Makefile
+# author : Boris Kolpackov <boris@kolpackov.net>
+# copyright : Copyright (c) 2002-2003 Boris Kolpackov
+# license : http://kolpackov.net/license.html
+
+root := ../..
+
+include $(root)/BuildRules/Bootstrap.rules
+
+$(call include, $(root)/BuildRules/Recursion.pre.rules)
+
+target_makefile_list :=
+target_directory_list := Policy
+
+$(call include, $(root)/BuildRules/Recursion.post.rules)
+# $Id$
diff --git a/ACE/contrib/utility/Documentation/Synch/News.xhtml b/ACE/contrib/utility/Documentation/Synch/News.xhtml
new file mode 100644
index 00000000000..f7bf4f01285
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Synch/News.xhtml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/Synch/News.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Synchronization Library News</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="news,C++,synchronization,policy,thread"/>
+ <meta name="description" content="Synchronization Library News"/>
+
+ <link rel="stylesheet" type="text/css" href="../Style/Default.css"/>
+
+</head>
+
+<body>
+
+<h1>1.1.0</h1>
+<ul class="multiline">
+ <li>New regression test coverage.</li>
+</ul>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/Synch/Policy/Makefile b/ACE/contrib/utility/Documentation/Synch/Policy/Makefile
new file mode 100644
index 00000000000..175d207b06e
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Synch/Policy/Makefile
@@ -0,0 +1,20 @@
+# file : Documentation/Synch/Policy/Makefile
+# author : Boris Kolpackov <boris@kolpackov.net>
+# copyright : Copyright (c) 2002-2003 Boris Kolpackov
+# license : http://kolpackov.net/license.html
+
+root := ../../..
+
+include $(root)/BuildRules/Bootstrap.rules
+
+$(call include, $(root)/BuildRules/Documentation.pre.rules)
+
+vpath %.hpp $(root)/Utility/Synch/Policy
+
+doc_translation_units := Null.hpp
+
+DOC_FLAGS := --strip-preprocessor -css $(root)/Documentation/Style/CXX.css
+
+$(call include, $(root)/BuildRules/Documentation.post.rules)
+
+# $Id$
diff --git a/ACE/contrib/utility/Documentation/Synch/Policy/Null.hpp.html b/ACE/contrib/utility/Documentation/Synch/Policy/Null.hpp.html
new file mode 100644
index 00000000000..21173a5951b
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Synch/Policy/Null.hpp.html
@@ -0,0 +1,59 @@
+<html>
+<head>
+<!-- Generated by the Spirit (http://spirit.sf.net) C++ to HTML Converter -->
+<title>
+Null.hpp</title>
+<link rel="stylesheet" href="../../../Documentation/Style/CXX.css" type="text/css"></head>
+<body>
+<pre>
+<span class=comment>// file : Utility/Synch/Policy/Null.hpp
+// author : Boris Kolpackov &lt;boris@kolpackov.net&gt;
+// copyright : Copyright (c) 2002-2003 Boris Kolpackov
+// license : http://kolpackov.net/license.html
+
+</span><span class=keyword>namespace </span><span class=identifier>Utility
+</span><span class=special>{
+ </span><span class=keyword>namespace </span><span class=identifier>Synch
+ </span><span class=special>{
+ </span><span class=keyword>namespace </span><span class=identifier>Policy
+ </span><span class=special>{
+
+ </span><span class=keyword>class </span><span class=identifier>NullMutex
+ </span><span class=special>{
+ </span><span class=special>};
+
+ </span><span class=keyword>class </span><span class=identifier>NullGuard
+ </span><span class=special>{
+ </span><span class=keyword>public</span><span class=special>:
+ </span><span class=keyword>explicit
+ </span><span class=identifier>NullGuard </span><span class=special>(</span><span class=identifier>NullMutex</span><span class=special>&amp;) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=keyword>private</span><span class=special>:
+ </span><span class=identifier>NullGuard </span><span class=special>(</span><span class=identifier>NullGuard </span><span class=keyword>const</span><span class=special>&amp;) </span><span class=keyword>throw </span><span class=special>();
+
+ </span><span class=identifier>NullGuard</span><span class=special>&amp;
+ </span><span class=keyword>operator</span><span class=special>= </span><span class=special>(</span><span class=identifier>NullGuard </span><span class=keyword>const</span><span class=special>&amp;) </span><span class=keyword>throw </span><span class=special>();
+ </span><span class=special>};
+
+ </span><span class=keyword>struct </span><span class=identifier>Null
+ </span><span class=special>{
+ </span><span class=keyword>typedef
+ </span><span class=identifier>NullMutex
+ </span><span class=identifier>Mutex</span><span class=special>;
+
+ </span><span class=keyword>typedef
+ </span><span class=identifier>NullGuard
+ </span><span class=identifier>ReadGuard</span><span class=special>;
+
+ </span><span class=keyword>typedef
+ </span><span class=identifier>NullGuard
+ </span><span class=identifier>WriteGuard</span><span class=special>;
+ </span><span class=special>};
+ </span><span class=special>}
+ </span><span class=special>}
+</span><span class=special>}
+
+</span></pre>
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/Synch/index.xhtml b/ACE/contrib/utility/Documentation/Synch/index.xhtml
new file mode 100644
index 00000000000..dd4a685ccc0
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Synch/index.xhtml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/Synch/index.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Synchronization Library</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="C++,utility,thread,synchronization,policy"/>
+ <meta name="description" content="Synchronization Library"/>
+
+ <link rel="stylesheet" type="text/css" href="../Style/Default.css"/>
+
+</head>
+
+<body>
+
+<h1>Introduction</h1>
+
+<p>
+Synchronization library provides a compile-time policy-based configurable
+facility of selecting synchronization mechanisms. For now there is only
+no-op synchronization policy provided which is suitable only for
+single-threaded applications. However it shouldn't be difficult to provide
+a wrapper policy for synchronization mechanisms used in a particular project.
+</p>
+
+<h1>Definitions</h1>
+<p>Below are the definitions of the key classes:</p>
+
+<ul class="menu">
+ <li><a href="Policy/Null.hpp.html">Synch::Policy::Null</a></li>
+</ul>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/TODO b/ACE/contrib/utility/Documentation/TODO
new file mode 100644
index 00000000000..984a0cddb56
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/TODO
@@ -0,0 +1,53 @@
+
+New features/changes
+---------------------------------------------------------------------------
+
+@@ DefaultImpl<> looks ugly. Is there a way to just write DefaultImpl
+ (or, perhaps some other name)? Maybe also rename Interface to Object
+ (will be consistent with Introspection::Object).
+
+@@ Abort facility
+
+@@ Maybe rename converter to convert
+
+@@ Maybe make reference counting object implement Introspection. However it
+ will introduce inter-library dependency. Nop, this is a bad idea.
+
+@@ Maybe move <library>.hpp one level up to Utility/.
+
+@@ Go thru C++Templates chapter on RefCounting and SmartPointers and see if
+ anything can be applied?
+
+@@ Examples for many features are missing
+
+@@ Introspection::TypeInfo should use set instead of vector for bases.
+
+
+Documentation
+---------------------------------------------------------------------------
+
+@@ code in <pre> does not look nice in lynx (see Hetero/index.html for example)
+
+
+Building environment
+---------------------------------------------------------------------------
+
+@@ Should probably make lib rules to build library when target is test (try to
+ run 'make clean && make test' from Utility root).
+
+@@ Makefile variable names inconsistency (e.g. cxx_translation_units and CXX_PREPROCESS_FLAGS)
+
+%% Rename Config to Build or rather BuildRules?
+
+@@ Compiler-specific stuff is left after make clean. Potentially dangerous
+ idea would be to remove everything except known files
+
+@@ Multi-compiler configuration
+
+@@ Building library with sources in sub-directories.
+
+
+Pre-release fixes
+---------------------------------------------------------------------------
+
+$Id$
diff --git a/ACE/contrib/utility/Documentation/Template.xhtml b/ACE/contrib/utility/Documentation/Template.xhtml
new file mode 100644
index 00000000000..41c9857dabf
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Template.xhtml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>@@</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="@@"/>
+ <meta name="description" content="@@"/>
+
+ <link rel="stylesheet" type="text/css" href="../Style/Default.css"/>
+
+</head>
+
+<body>
+
+<h1>@@</h1>
+
+</body>
+</html>
+<!-- $Id$ -->
diff --git a/ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount b/ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount
new file mode 100644
index 00000000000..be8b252d4de
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount
@@ -0,0 +1,95 @@
+From: Gianni Mariani <gi2nospam@mariani.ws>
+Date: 26 Jul 2003 04:52:43 GMT
+Newsgroups: comp.lang.c++
+Subject: Re: enum count
+
+Clive wrote:
+> If you have an enum, is there any way during execution to find the number of
+> values in the enum?
+> Say I have,
+>
+> enum great { five, ten, fifteen };
+>
+> How could I get the number 3 from that?
+>
+>
+
+replace the enums with objects that report themselves to a registry.
+
+
+I have done it in the past using a template ...
+
+templace <typename base>
+class ExposedEnum : public base
+{
+ public:
+ int enum_val;
+ ExposedEnum( int number )
+ : enum_val( number )
+ {
+ ExposedEnumRegister<base>::Register( *this );
+ }
+
+ ExposedEnum( int number )
+ : enum_val( ExposedEnumRegister<base>::GetNextNumber() )
+ {
+ ExposedEnumRegister<base>::Register( *this );
+ }
+
+
+
+// some more stuff ...
+
+ operator int () const
+ {
+ return enum_val;
+ }
+
+ explicit ExposedEnum( const ExposedEnum & foo );
+};
+
+
+template <typename base>
+class ExposedEnumRegister
+{
+
+ static int GetNextNumber ....
+
+ static void Register ....
+
+ static int Count ....
+
+}
+
+
+Now you can forward declare them...
+
+extern ExposedEnum< great > five;
+
+extern ExposedEnum< great > ten;
+
+extern ExposedEnum< great > fifteen;
+
+
+
+
+In a cpp file you can instantiate them.
+
+ExposedEnum< great > five( 5 );
+
+ExposedEnum< great > ten( 10 );
+
+ExposedEnum< great > fifteen;
+
+
+Now, if you want to know how many you have :
+
+ExposedEnumRegister< great >::Count();
+
+
+
+Disclaimer - it's an outline only, yes it's incomplete.
+
+G
+
+$Id$
diff --git a/ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount2 b/ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount2
new file mode 100644
index 00000000000..d23e790b6d4
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Thoughts/Enum/EnumCount2
@@ -0,0 +1,17 @@
+From: Alexander Terekhov <terekhov@web.de>
+Date: Sat, 26 Jul 2003 19:17:52 +0200
+Newsgroups: comp.lang.c++
+Subject: Re: enum count
+
+
+Steve Pinard wrote:
+>
+> Wouldn't that be nice? And wouldn't it be nice to be able to get the
+> strings "five", "ten", and "fifteen" too?
+
+http://lcgapp.cern.ch/project/architecture/XTI_accu.pdf
+
+regards,
+alexander.
+
+$Id$
diff --git a/ACE/contrib/utility/Documentation/Thoughts/Enum/EnumInfo b/ACE/contrib/utility/Documentation/Thoughts/Enum/EnumInfo
new file mode 100644
index 00000000000..e59a27c0820
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/Thoughts/Enum/EnumInfo
@@ -0,0 +1,45 @@
+From: "Klaus Eichner" <klaus_gb@yahoo.com>
+Date: Sat, 26 Jul 2003 14:53:23 +0100
+Newsgroups: comp.lang.c++
+Subject: Re: enum count
+
+"Clive" <clive@clive.clive> wrote in message
+news:3f21e5cc$0$23611$5a62ac22@freenews.iinet.net.au...
+> If you have an enum, is there any way during execution to find the number
+of
+> values in the enum?
+> Say I have,
+>
+> enum great { five, ten, fifteen };
+>
+> How could I get the number 3 from that?
+
+You could get the number 3 from 'great' with your own, user-defined
+'Enum_Info' template:
+
+cout << "The number of values in enum great is "
+ << Enum_Info<great>::number_of_elements
+ << endl;
+
+The 'Enum_Info' template is defined as follows.
+Suppose you have the following enums:
+
+enum great { five, ten, fifteen };
+enum greater { none, one, fourtytwo, fourtythree, fourtyfour };
+enum even_greater { minusone, minustwo, minusthree, minusfour, minusfive,
+minussix, minusseven };
+
+You could build a template class 'Enum_Info' which uses specialisation to
+register the number of elements in each enum
+
+template <class T> class Enum_Info { };
+template <> class Enum_Info<great> { static const int number_of_elements =
+3; };
+template <> class Enum_Info<greater> { static const int number_of_elements =
+5; };
+template <> class Enum_Info<even_greater> { static const int
+number_of_elements = 7; };
+
+
+
+$Id$
diff --git a/ACE/contrib/utility/Documentation/index.xhtml b/ACE/contrib/utility/Documentation/index.xhtml
new file mode 100644
index 00000000000..87e82d228dc
--- /dev/null
+++ b/ACE/contrib/utility/Documentation/index.xhtml
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+
+<!--
+
+file : Documentation/index.xhtml
+author : Boris Kolpackov <boris@kolpackov.net>
+copyright : Copyright (c) 2002-2003 Boris Kolpackov
+license : http://kolpackov.net/license.html
+
+-->
+
+<head>
+
+ <title>Utility Library</title>
+
+ <meta name="author" content="Boris Kolpackov"/>
+ <meta name="copyright" content="&copy; 2001-2003 Boris Kolpackov"/>
+ <meta name="keywords" content="C++,utility,exception,handling,model,reference,counting,thread,synchronization"/>
+ <meta name="description" content="Utility Library"/>
+
+ <link rel="stylesheet" type="text/css" href="Style/Default.css"/>
+
+</head>
+
+<body>
+
+<h1>Introduction</h1>
+<p>
+Utility library is a place for generic C++ facilities that I found useful
+in more than one project.
+
+Here you can download the
+<a href="http://kolpackov.net/projects/Utility/Download.xhtml">
+latest version</a>.
+
+Utility library is a
+<a href="http://gnu.org/philosophy/categories.html#Non-CopyleftedFreeSoftware">
+non-copylefted free software</a> with zlib-like
+<a href="http://kolpackov.net/license.html">license</a>.
+
+For changes and new features check out <a href="News.xhtml">News section</a>.
+</p>
+
+<h1>Supported Platforms</h1>
+
+<p>
+For the time being I test Utility library with at least GNU G++ on Linux and
+Compaq (Digital) C++ (-std strict_ansi) on Tru64 UNIX. It also should compile
+and work fine with any decent C++ compiler. Also note that I don't have any
+plans to bloat source code in attempt to support broken compilers.</p>
+
+<h1>Building</h1>
+
+<p>
+Utility library mostly consists of header-only sub-libraries so you don't
+actually need to build anything to start using it. See <a href="Build.xhtml">
+Building Utility Library</a> section for more information.</p>
+
+<h1>Content</h1>
+
+<p>Utility Library consists of the following sub-libraries:</p>
+
+<ul class="menu">
+ <li><a href="CommandLine/index.xhtml">Command Line Processing</a></li>
+
+ <li><a href="ExH/index.xhtml">Exception Handling</a></li>
+
+ <li><a href="Hetero/index.xhtml">Heterogeneous Container</a></li>
+
+ <li><a href="Introspection/index.xhtml">Introspection</a></li>
+
+ <li><a href="ReferenceCounting/index.xhtml">Reference Counting</a></li>
+
+ <li><a href="Synch/index.xhtml">Synchronization</a></li>
+</ul>
+
+</body>
+</html>
+<!-- $Id$ -->