diff options
Diffstat (limited to 'ACE/contrib/utility/Documentation')
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="© 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&bug_id=1516&group_id=71">1516</a> +and +<a href="http://savannah.gnu.org/bugs/?func=detailbug&bug_id=1517&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="© 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="© 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="© 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 <boris@kolpackov.net> +// 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><</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>> + </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>& </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><</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>> + </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>& </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>& </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>& + </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>& </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 <boris@kolpackov.net> +// copyright : Copyright (c) 2002-2003 Boris Kolpackov +// license : http://kolpackov.net/license.html + +</span><span class=preprocessor>#include "Utility/ExH/System/Exception.hpp" + +</span><span class=preprocessor>#include <iostream> + +</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>& </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>& </span><span class=identifier>br </span><span class=special>(</span><span class=keyword>dynamic_cast</span><span class=special><</span><span class=identifier>B</span><span class=special>&> </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>& </span><span class=identifier>ex</span><span class=special>) + </span><span class=special>{ + </span><span class=identifier>cerr </span><span class=special><< </span><span class=string>"Caught Utility::ExH::System::Exception: " + </span><span class=special><< </span><span class=identifier>ex</span><span class=special>.</span><span class=identifier>what </span><span class=special>() + </span><span class=special><< </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 <boris@kolpackov.net> +// copyright : Copyright (c) 2002-2003 Boris Kolpackov +// license : http://kolpackov.net/license.html + +</span><span class=preprocessor>#include "Utility/ExH/Compound.hpp" +</span><span class=preprocessor>#include "Utility/ExH/System/Exception.hpp" +</span><span class=preprocessor>#include "Utility/ExH/Logic/DescriptiveException.hpp" + +</span><span class=comment>// Include some helper converters to allow exception initialization +// with std::ostringstream + +</span><span class=preprocessor>#include "Utility/ExH/StringStreamConverter.hpp" + +</span><span class=preprocessor>#include <iostream> + +</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><</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>> + </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><</span><span class=identifier>InvalidArgument_</span><span class=special>, </span><span class=identifier>Exception</span><span class=special>> + </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><</span><span class=identifier>NotInitialized_</span><span class=special>, </span><span class=identifier>Exception</span><span class=special>> + </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>"Base::foo: first parameter is zero."</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><< </span><span class=string>"Base::foo [this = " </span><span class=special><< </span><span class=keyword>this </span><span class=special><< </span><span class=string>"]: object is not initialized."</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><</span><span class=identifier>NotImplemented_</span><span class=special>, </span><span class=identifier>Exception</span><span class=special>> + </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>"Derived::vfoo: not implemented yet."</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>(&</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>-></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>& </span><span class=identifier>ex</span><span class=special>) + </span><span class=special>{ + </span><span class=identifier>cerr </span><span class=special><< </span><span class=string>"Caught Base::Exception: " </span><span class=special><< </span><span class=identifier>ex</span><span class=special>.</span><span class=identifier>what </span><span class=special>() </span><span class=special><< </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>-></span><span class=identifier>foo </span><span class=special>(</span><span class=string>"hello"</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>& </span><span class=identifier>ex</span><span class=special>) + </span><span class=special>{ + </span><span class=identifier>cerr </span><span class=special><< </span><span class=string>"Caught Base::NotInitialized: " </span><span class=special><< </span><span class=identifier>ex</span><span class=special>.</span><span class=identifier>what </span><span class=special>() </span><span class=special><< </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>-></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>& </span><span class=identifier>ex</span><span class=special>) + </span><span class=special>{ + </span><span class=identifier>cerr </span><span class=special><< </span><span class=string>"Caught Logic::Exception: " </span><span class=special><< </span><span class=identifier>ex</span><span class=special>.</span><span class=identifier>what </span><span class=special>() </span><span class=special><< </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><< </span><span class=string>"Caught unknown exception using catch-all handler" </span><span class=special><< </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 <boris@kolpackov.net> +// copyright : Copyright (c) 2002-2003 Boris Kolpackov +// license : http://kolpackov.net/license.html + +</span><span class=preprocessor>#include <cstdlib> // for std::abort () + +</span><span class=preprocessor>#include <string> +</span><span class=preprocessor>#include <iostream> + +</span><span class=preprocessor>#include "Utility/ExH/System/Exception.hpp" +</span><span class=preprocessor>#include "Utility/ExH/Logic/Exception.hpp" + +</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>"Hello, world!"</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>"" </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>< </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><< </span><span class=identifier>greeting_</span><span class=special>.</span><span class=identifier>c_str </span><span class=special>() </span><span class=special><< </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>< </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>"Hi dude!"</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>& </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><< </span><span class=string>"Given up!" </span><span class=special><< </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><< </span><span class=string>"Application is feeling dizzy. Trying again..." + </span><span class=special><< </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>& </span><span class=special>) + </span><span class=special>{ + </span><span class=identifier>cerr </span><span class=special><< </span><span class=string>"Cought Application::InvalidArg : ...hmm... strange!" + </span><span class=special><< </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>& </span><span class=identifier>e</span><span class=special>) + </span><span class=special>{ + </span><span class=identifier>cerr </span><span class=special><< </span><span class=string>"Caught Logic::Exception : " </span><span class=special><< </span><span class=identifier>e</span><span class=special>.</span><span class=identifier>what </span><span class=special>() </span><span class=special><< </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>& </span><span class=identifier>e</span><span class=special>) + </span><span class=special>{ + </span><span class=identifier>cerr </span><span class=special><< </span><span class=string>"Caught System::Exception : " </span><span class=special><< </span><span class=identifier>e</span><span class=special>.</span><span class=identifier>what </span><span class=special>() </span><span class=special><< </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><< </span><span class=string>"Caught unknown exception using catch-all handler. " </span><span class=special><< </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 << 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 <boris@kolpackov.net> +// copyright : Copyright (c) 2002-2003 Boris Kolpackov +// license : http://kolpackov.net/license.html + +</span><span class=preprocessor>#include "Utility/ExH/System/Exception.hpp" +</span><span class=preprocessor>#include "Utility/ExH/Logic/Exception.hpp" + +</span><span class=preprocessor>#include <iostream> + +</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>& </span><span class=identifier>ex</span><span class=special>) + </span><span class=special>{ + </span><span class=identifier>cerr </span><span class=special><< </span><span class=string>"Caught Utility::ExH::System::Exception: " + </span><span class=special><< </span><span class=identifier>ex</span><span class=special>.</span><span class=identifier>what </span><span class=special>() + </span><span class=special><< </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 <boris@kolpackov.net> +// 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>& </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><</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>> + </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>& </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>& </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>& + </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>& </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><</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>> </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 <boris@kolpackov.net> +// 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 "converted" 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="© 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 + <karen@ipmce.ru> 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 <boris@kolpackov.net> +// 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>& </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><</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>> + </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>& </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>& </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>& + </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>& </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 <boris@kolpackov.net> +// 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="© 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="© 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="© 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 <typename T> +void print (T const& t) +{ + cout << t << 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="© 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="© 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="© 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 <boris@kolpackov.net> +// 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><</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>> + </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><</span><span class=identifier>InconsistentState_</span><span class=special>, </span><span class=identifier>Exception</span><span class=special>> + </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>& + </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>&) </span><span class=keyword>throw </span><span class=special>(); + </span><span class=identifier>DefaultImpl</span><span class=special>& + </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>&) </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 <boris@kolpackov.net> +// 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><</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>> + </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>&) </span><span class=keyword>throw </span><span class=special>(); + </span><span class=identifier>Interface</span><span class=special>& + </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>&) </span><span class=keyword>throw </span><span class=special>(); + </span><span class=special>}; + + </span><span class=keyword>template </span><span class=special><</span><span class=keyword>typename </span><span class=identifier>Type</span><span class=special>> + </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="© 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<typename Other> +SmartPtr (SmartPtr<Other> const&) +</pre> +and +<pre class="cpp-code"> +template<typename Other> +operator= (SmartPtr<Other> const&) +</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 <typename D, typename S> +D* +smart_cast (SmartPtr<S> const&) +</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 <typename T> +SmartPtr<T> 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 <boris@kolpackov.net> +// 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><</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>> + </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><</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>> + </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><</span><span class=identifier>Type</span><span class=special>> </span><span class=keyword>const</span><span class=special>& </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><</span><span class=keyword>typename </span><span class=identifier>Other</span><span class=special>> + </span><span class=identifier>SmartPtr </span><span class=special>(</span><span class=identifier>SmartPtr</span><span class=special><</span><span class=identifier>Other</span><span class=special>> </span><span class=keyword>const</span><span class=special>& </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 & copy-assignment operators + + </span><span class=identifier>SmartPtr</span><span class=special><</span><span class=identifier>Type</span><span class=special>>& + </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><</span><span class=identifier>Type</span><span class=special>>& + </span><span class=keyword>operator</span><span class=special>= </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=keyword>const</span><span class=special>& </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><</span><span class=keyword>typename </span><span class=identifier>Other</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=keyword>operator</span><span class=special>= </span><span class=special>(</span><span class=identifier>SmartPtr</span><span class=special><</span><span class=identifier>Other</span><span class=special>> </span><span class=keyword>const</span><span class=special>& </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>-> </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<T> + </span><span class=keyword>template </span><span class=special><</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>> + </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><</span><span class=identifier>T</span><span class=special>> </span><span class=keyword>const</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=comment>// Dynamic type conversion function for SmartPtr's + </span><span class=keyword>template </span><span class=special><</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>> + </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><</span><span class=identifier>S</span><span class=special>> </span><span class=keyword>const</span><span class=special>& </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><</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>> + </span><span class=identifier>SmartPtr</span><span class=special><</span><span class=identifier>T</span><span class=special>> + </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 <boris@kolpackov.net> +// 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><</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>> + </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><</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>> + </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><</span><span class=identifier>Type</span><span class=special>> </span><span class=keyword>const</span><span class=special>& </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><</span><span class=keyword>typename </span><span class=identifier>Other</span><span class=special>> + </span><span class=identifier>StrictPtr </span><span class=special>(</span><span class=identifier>StrictPtr</span><span class=special><</span><span class=identifier>Other</span><span class=special>> </span><span class=keyword>const</span><span class=special>& </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 & copy-assignment operators + + </span><span class=identifier>StrictPtr</span><span class=special><</span><span class=identifier>Type</span><span class=special>>& + </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><</span><span class=identifier>Type</span><span class=special>>& + </span><span class=keyword>operator</span><span class=special>= </span><span class=special>(</span><span class=identifier>StrictPtr</span><span class=special><</span><span class=identifier>Type</span><span class=special>> </span><span class=keyword>const</span><span class=special>& </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><</span><span class=keyword>typename </span><span class=identifier>Other</span><span class=special>> + </span><span class=identifier>StrictPtr</span><span class=special><</span><span class=identifier>Type</span><span class=special>>& + </span><span class=keyword>operator</span><span class=special>= </span><span class=special>(</span><span class=identifier>StrictPtr</span><span class=special><</span><span class=identifier>Other</span><span class=special>> </span><span class=keyword>const</span><span class=special>& </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>-> </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<T> + </span><span class=keyword>template </span><span class=special><</span><span class=keyword>typename </span><span class=identifier>T</span><span class=special>> + </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><</span><span class=identifier>T</span><span class=special>> </span><span class=keyword>const</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=comment>// Dynamic type conversion function for StrictPtr's + </span><span class=keyword>template </span><span class=special><</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>> + </span><span class=identifier>StrictPtr</span><span class=special><</span><span class=identifier>D</span><span class=special>> + </span><span class=identifier>strict_cast </span><span class=special>(</span><span class=identifier>StrictPtr</span><span class=special><</span><span class=identifier>S</span><span class=special>> </span><span class=keyword>const</span><span class=special>& </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="© 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="© 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 <boris@kolpackov.net> +// 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>&) </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>&) </span><span class=keyword>throw </span><span class=special>(); + + </span><span class=identifier>NullGuard</span><span class=special>& + </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>&) </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="© 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="© 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="© 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$ --> |