initial checkin

[SVN r11780]
This commit is contained in:
Aleksey Gurtovoy
2001-11-25 18:32:11 +00:00
commit 8afa89bd2a
96 changed files with 6941 additions and 0 deletions

View File

@ -0,0 +1,334 @@
<html>
<head>
<title>Boost PREPROCESSOR library</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">
<a href="index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../c++boost.gif"
width=277 align=center></a>
<hr>
<h1>Boost PREPROCESSOR library: Tutorial examples preprocessed</h1>
<p>The following code snippets were produced by actually preprocessing the code
snippets of the tutorial. After preprocessing the code was reformatted manually.</p>
<hr>
<p><strong><a name="Local Macro"></a><a href="tutorial.htm#Local Macro">EXAMPLE</a>:</strong>
Use a Local Macro to avoid small scale repetition</p>
<blockquote>
<pre>template&lt;class T, int n&gt;
vec&lt;T,n&gt;&
operator +=
( vec&lt;T,n&gt;&
lhs
, const vec&lt;T,n&gt;&
rhs
)
{ for (int i=0; i&lt;n; ++i)
lhs(i) += rhs(i);
return lhs;
}
template&lt;class T, int n&gt;
vec&lt;T,n&gt;&
operator -=
( vec&lt;T,n&gt;&
lhs
, const vec&lt;T,n&gt;&
rhs
)
{ for (int i=0; i&lt;n; ++i)
lhs(i) -= rhs(i);
return lhs;
}
template&lt;class T, int n&gt;
vec&lt;T,n&gt;&
operator *=
( vec&lt;T,n&gt;&
lhs
, const vec&lt;T,n&gt;&
rhs
)
{ for (int i=0; i&lt;n; ++i)
lhs(i) *= rhs(i);
return lhs;
}
template&lt;class T, int n&gt;
vec&lt;T,n&gt;&
operator /=
( vec&lt;T,n&gt;&
lhs
, const vec&lt;T,n&gt;&
rhs
)
{ for (int i=0; i&lt;n; ++i)
lhs(i) /= rhs(i);
return lhs;
}
</pre>
</blockquote>
<hr>
<p><strong><a name="UNUSED"></a><a href="tutorial.htm#UNUSED">EXAMPLE</a>:</strong>
Use BOOST_PREPROCESSOR_EMPTY() as an unused parameter in Local Macro instantiations</p>
<blockquote>
<pre>template&lt;class base&gt;
typename implement_subscript_using_begin_subscript&lt;base&gt;::value_type&
implement_subscript_using_begin_subscript&lt;base&gt;::operator[]
( index_type
i
)
{ return base::begin()[i];
}
template&lt;class base&gt;
const typename implement_subscript_using_begin_subscript&lt;base&gt;::value_type&
implement_subscript_using_begin_subscript&lt;base&gt;::operator[]
( index_type
i
) const
{ return base::begin()[i];
}
</pre>
</blockquote>
<hr>
<p><b><a name="CAT"></a><a href="tutorial.htm#CAT">EXAMPLE:</a></b> Use BOOST_PREPROCESSOR_CAT instead of ## when necessary</p>
<blockquote>
<pre>enum
{ static_check_152 = (sizeof(int) &lt;= sizeof(long)) ? 1 : -1
};
typedef char
static_assert_152
[ static_check_152
];
</pre>
</blockquote>
<hr>
<p><b><a name="STRINGIZE"></a><a href="tutorial.htm#STRINGIZE">EXAMPLE:</a></b> Use BOOST_PREPROCESSOR_STRINGIZE instead of # whenever necessary</p>
<blockquote>
<pre>#pragma message("examples.cpp" "(" "20" ") : " "TBD!")</pre>
</blockquote>
<hr>
<p><strong><a name="ENUM_PARAMS"></a><a href="tutorial.htm#ENUM_PARAMS">EXAMPLE</a>:</strong>
Use:</p>
<ul>
<li> BOOST_PREPROCESSOR_ENUM_PARAMS,</li>
<li> BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT,</li>
<li> BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS,</li>
<li> BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS, or</li>
<li>BOOST_PREPROCESSOR_REPEAT, and</li>
<li> BOOST_PREPROCESSOR_COMMA_IF</li>
</ul>
<p>to avoid O(N) repetition on lists in general</p>
<blockquote>
<pre>struct make_type_list_end;
template
&lt; class T0=make_type_list_end
, class T1=make_type_list_end
, class T2=make_type_list_end
, class T3=make_type_list_end
, class T4=make_type_list_end
, class T5=make_type_list_end
, class T6=make_type_list_end
, class T7=make_type_list_end
&gt;
struct make_type_list
{
private:
enum
{ end = is_same&lt;T0,make_type_list_end&gt;::value
};
public:
typedef typename
type_if
&lt; end
, type_cons_empty
, type_cons
&lt; T0
, typename
type_inner_if
&lt; end
, type_identity&lt;end&gt;
, make_type_list
&lt; T1
, T2
, T3
, T4
, T5
, T6
, T7
&gt;
&gt;::type
&gt;
&gt;::type type;
};
</pre>
</blockquote>
<hr>
<p><strong><a name="Token Look-Up"></a><a href="tutorial.htm#Token Look-Up">EXAMPLE</a>:</strong>
Use BOOST_PREPROCESSOR_REPEAT and a Token Look-Up Function to eliminate categorical
repetition</p>
<blockquote>
<pre>catch (bool t)
{ report_typeid(t);
report_value(t);
}
catch (char t)
{ report_typeid(t);
report_value(t);
}
catch (signed char t)
{ report_typeid(t);
report_value(t);
}
catch (unsigned char t)
{ report_typeid(t);
report_value(t);
}
catch (short t)
{ report_typeid(t);
report_value(t);
}
catch (unsigned short t)
{ report_typeid(t);
report_value(t);
}
catch (int t)
{ report_typeid(t);
report_value(t);
}
catch (unsigned int t)
{ report_typeid(t);
report_value(t);
}
catch (long t)
{ report_typeid(t);
report_value(t);
}
catch (unsigned long t)
{ report_typeid(t);
report_value(t);
}
catch (float t)
{ report_typeid(t);
report_value(t);
}
catch (double t)
{ report_typeid(t);
report_value(t);
}
catch (long double t)
{ report_typeid(t);
report_value(t);
}
</pre>
</blockquote>
<hr>
<p><strong><a name="2ND_REPEAT"></a><a href="tutorial.htm#2ND_REPEAT">EXAMPLE</a>:</strong>
Use BOOST_PREPROCESSOR_REPEAT_2ND to avoid O(N*N) repetition</p>
<blockquote>
<pre>vec()
{
}
vec(T a0)
{ (*this)[0] = a0;
}
vec(T a0, T a1)
{ (*this)[0] = a0;
(*this)[1] = a1;
}
vec(T a0, T a1, T a2)
{ (*this)[0] = a0;
(*this)[1] = a1;
(*this)[2] = a2;
}
vec(T a0, T a1, T a2, T a3)
{ (*this)[0] = a0;
(*this)[1] = a1;
(*this)[2] = a2;
(*this)[3] = a3;
}
vec(T a0, T a1, T a2, T a3, T a4)
{ (*this)[0] = a0;
(*this)[1] = a1;
(*this)[2] = a2;
(*this)[3] = a3;
(*this)[4] = a4;
}
vec(T a0, T a1, T a2, T a3, T a4, T a5)
{ (*this)[0] = a0;
(*this)[1] = a1;
(*this)[2] = a2;
(*this)[3] = a3;
(*this)[4] = a4;
(*this)[5] = a5;
}
vec(T a0, T a1, T a2, T a3, T a4, T a5, T a6)
{ (*this)[0] = a0;
(*this)[1] = a1;
(*this)[2] = a2;
(*this)[3] = a3;
(*this)[4] = a4;
(*this)[5] = a5;
(*this)[6] = a6;
}
vec(T a0, T a1, T a2, T a3, T a4, T a5, T a6, T a7)
{ (*this)[0] = a0;
(*this)[1] = a1;
(*this)[2] = a2;
(*this)[3] = a3;
(*this)[4] = a4;
(*this)[5] = a5;
(*this)[6] = a6;
(*this)[7] = a7;
}
</pre>
</blockquote>
<p>
<hr>
<p><a name="IF"></a><a href="tutorial.htm#IF"><b>EXAMPLE:</b></a>
Use BOOST_PREPROCESSOR_IF to implement special case for the first element</p>
<blockquote>
<pre>false == false;
true == true;
</pre>
</blockquote>
<p>
<hr>
<p><a name="Arithmetic"></a><a href="tutorial.htm#Arithmetic"><B>EXAMPLE:</B></a> Use arithmetic, logical and comparison operations when necessary</p>
<blockquote>
<pre>S, E0, E1
E0, S, E1
E0, E1, S
BAD PARAMS FOR SPECIAL_NUMBERED_LIST! E0, E1, E2, S</pre>
</blockquote>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Updated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" -->
<p></p>
</body>
</html>

55
doc/index.htm Normal file
View File

@ -0,0 +1,55 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Boost PREPROCESSOR library</TITLE>
<BODY bgcolor="#FFFFFF">
<IMG height=86
src="../../../c++boost.gif"
alt="c++boost.gif (8819 bytes)"
width=277 align=center>
<hr>
<h1>Boost PREPROCESSOR library</h1>
<p>C++ programming sometimes involves repeating lists of template or function
parameters. Such repetition is troublesome, because it tends to be done manually,
which means that the maximum number of parameters is bound into the design of
the program making it difficult to configure. Automating the repetition using
extra linguistic tools introduces another set of problems.</p>
<p>The C preprocessor is part of the C++ language and can manipulate and generate
tokens. Unfortunately the C preprocessor is also a very low level macro processor.
In particular, it doesn't directly support repetition or recursion. Fortunately
it is possible to perform finite repetition and recursion using a library of
preprocessor primitives.</p>
<p>The PREPROCESSOR library provides facilities for C preprocessor metaprogramming.
Preprocessor metaprogramming makes it possible to generate function and template
parameter lists and make libraries configurable through preprocessor definitions.</p>
<h2>Documentation</h2>
<DL>
<LI><A href="tutorial.htm">Tutorial</A>
<LI><A href="reference/index.html">Reference</A>
<LI><a href="known_problems_with_cpp.htm">Widely known problems with the C preprocessor</a>
<LI><A href="keywords.txt">Keywords for syntax hilite</A>
<LI><A href="references.htm">References</A>
<LI><A href="problems_with_compilers.htm">Known problems with specific compilers</A>
</DL>
<h3>Acknowledgements</h3>
<p>The original idea of passing two extra parameters to REPEAT, which makes it
possible to create preprocessor code on top of it, was due to Aleksey Gurtovoy.
The invokeable IDENTITY macro was also invented by him. He also suggested the
name for the library. Many thanks to Aleksey for his insights!</p>
<p>Thanks to everyone who participated in the review: David Abrahams, Beman Dawes,
Ronald Garcia, Douglas Gregor, Aleksey Gurtovoy, Jeremy Siek, and Daryle Walker.</p>
<p>The PREPROCESSOR library has been developed by Vesa Karvonen.</p>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Updated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" -->
<p></p>
</BODY></HTML>

39
doc/keywords.txt Normal file
View File

@ -0,0 +1,39 @@
BOOST_PREPROCESSOR_ADD
BOOST_PREPROCESSOR_AND
BOOST_PREPROCESSOR_ASSERT_MSG
BOOST_PREPROCESSOR_BOOL
BOOST_PREPROCESSOR_CAT
BOOST_PREPROCESSOR_COMMA
BOOST_PREPROCESSOR_COMMA_IF
BOOST_PREPROCESSOR_DEC
BOOST_PREPROCESSOR_DIV
BOOST_PREPROCESSOR_EMPTY
BOOST_PREPROCESSOR_ENUM_PARAMS
BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT
BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS
BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS
BOOST_PREPROCESSOR_EQUAL
BOOST_PREPROCESSOR_GREATER
BOOST_PREPROCESSOR_GREATER_EQUAL
BOOST_PREPROCESSOR_IDENTITY
BOOST_PREPROCESSOR_IF
BOOST_PREPROCESSOR_INC
BOOST_PREPROCESSOR_LESS
BOOST_PREPROCESSOR_LESS_EQUAL
BOOST_PREPROCESSOR_LIMIT_DIM
BOOST_PREPROCESSOR_LIMIT_MAG
BOOST_PREPROCESSOR_LIMIT_TUPLE
BOOST_PREPROCESSOR_MAX
BOOST_PREPROCESSOR_MIN
BOOST_PREPROCESSOR_MUL
BOOST_PREPROCESSOR_NOR
BOOST_PREPROCESSOR_NOT
BOOST_PREPROCESSOR_NOT_EQUAL
BOOST_PREPROCESSOR_OR
BOOST_PREPROCESSOR_REPEAT
BOOST_PREPROCESSOR_REPEAT_2ND
BOOST_PREPROCESSOR_REPEAT_3RD
BOOST_PREPROCESSOR_STRINGIZE
BOOST_PREPROCESSOR_SUB
BOOST_PREPROCESSOR_TUPLE_ELEM
BOOST_PREPROCESSOR_XOR

View File

@ -0,0 +1,113 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Boost PREPROCESSOR library</TITLE>
<BODY bgcolor="#ffffff">
<a href="index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../c++boost.gif"
width=277 align=center></a>
<hr>
<h1>Boost PREPROCESSOR library:&nbsp;Widely known problems with the C preprocessor</h1>
<p>
Preprocessor metaprogramming is subject to heated discussions. Part of this is caused by
bad experiences with dangerous techniques, such as defining inline functions using macros. As a rule
of thumb, if you can find a clean and
manageable way to do something without using the preprocessor, then
you should do it that way.</p>
<p>Let's survey some of the widely known problems with the preprocessor in a problem/solution
format.</p>
<HR>
<p><B>PROBLEM:</B>&nbsp;Preprocessor does not
respect scope, therefore macros can accidentally and sometimes silently replace
code.</p>
<p><B>SOLUTION A:</B> Use all caps identifiers
for macros and only macros. This practically eliminates the possibility that a
macro might replace other kind of code accidentally.</p>
<p><B>SOLUTION B:</B> Use the Local Macro
idiom:</p>
<blockquote><pre>#define MACRO ...
// Use MACRO
#undef MACRO
</pre></blockquote>
<p>This makes sure that a macro can not accidentally
replace code outside of the scope of the local macro.</p>
<P>A problem with this solution is&nbsp;that the #undef can not be automated and may be
forgotten. Experienced programmers generally write the #undef either immediately
before (in time) or immediately after writing the macro definition.</P>
<P><B>SOLUTION C:</B> Use the Unique Macro Prefix idiom:</P>
<blockquote><pre>#define UMP_MACRO
// Use UMP_MACRO
</pre></blockquote>
<P>This makes accidental substitution and collisions highly
unlikely. Problems with this solution:</P>
<UL>
<LI>
There can still be naming collisions inside a large project.
<LI>
Macros still pollute the global namespace. </LI></UL>
<P><EM><B>By combining all solutions, whenever
possible, the scope problem can be largely avoided.</B></EM></P>
<HR>
<P><B>PROBLEM:</B> &nbsp;Preprocessor code is difficult to read.
It requires understanding the basic process of how
the&nbsp;preprocessor recursively expands macros, finding the macro definition and mentally
substituting the parameters of the macro. </P>
<P><B>SOLUTION:</B> Any kind of programming requires basic understanding
of how the code is executed. Any parameterization technique, including simple
functions and templates requires finding the definition and mentally substituting
parameters. </P>
<P>However, it is good to know a few techniques:</P>
<UL>
<LI>
By using as many Local Macros as reasonable, the bulk of the searching
process can be eliminated.
<LI>
Code browsers and text search tools make it easier to find the
definitions.
<LI>
The compiler can be used for generating the preprocessed source code in
order to look for bugs.
<LI>
Before turning something into a&nbsp;preprocessor metaprogram, first
implement a small scale version of it without preprocessor. Then work
bottom-&gt;up replacing hand written constructs by using preprocessor. This
way you can test the code incrementally. Experienced programmers often skip
many stages, but if something proves too complex to write directly, it is
always possible to fall back to incremental methods.
<LI>
If you insert a special symbol into the preprocessor code in places where
there should be a line break, you can make code readable after preprocessing
simply by using a search and replace tool. </LI></UL>
<P><B><EM> An especially important thing to remember is to limit the use of&nbsp;preprocessor
to the structured, well understood and safe methods. Structure helps to understand
complex systems <A href="references.htm#[4]">[4]</A>.</EM></B></P>
<HR>
<P><B>PROBLEM:</B> "I'd
like to see Cpp abolished." - Bjarne Stroustrup in&nbsp;<A href="references.htm#[1]">[1]</A></P>
<P><B>SOLUTION:</B>&nbsp;The C preprocessor&nbsp;will be here for a
long time.</P>
<P><EM><B>In practice, preprocessor metaprogramming is far simpler and more portable
than template metaprogramming <A href="references.htm#[2]">[2]</A>.</B></EM></P>
<hr>
<P><EFBFBD> Copyright Housemarque, Inc. 2001</P>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Updated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>
<p></p>
</BODY></HTML>

21
doc/plan.txt Normal file
View File

@ -0,0 +1,21 @@
If you have suggestions for additions or improvements to this library,
please e-mail such suggestions to boost@yahoogroups.com, but also cc
them to vesa.karvonen@housemarque.fi.
Issues:
- case studies
- more isolated examples & less complex examples in tutorial
-> Please e-mail suggestions to vesa.karvonen@housemarque.fi
Resolved for now:
- explanations of tricky issues with macro replacement
- how macros are expanded, step-by-step examples
- delay of # and ##
- recursion prohibition
-> Just refer to the standard. It is not the purpose of the documentation to teach C++.
- arithmetic
- The preprocessor limitations seem to make it impossible to achieve both:
- O(1) _size_ implementation of ADD, SUB, MUL, DIV, ...
- ease of use
-> I have choosen ease of use and used O(N) size implementations

View File

@ -0,0 +1,65 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Boost PREPROCESSOR library</TITLE>
<BODY bgcolor="#ffffff">
<a href="index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../c++boost.gif"
width=277 align=center></a>
<hr>
<h1>Boost PREPROCESSOR library:&nbsp;Known problems with specific compilers</h1>
<p> Some compilers have buggy or limited preprocessors. This page explains known
problems with specific compilers.</p>
<hr>
<h2>Contents</h2>
<ul>
<li><a href="#Metrowerks Codewarrior 7.0">Metrowerks Codewarrior 7.0</a></li>
</ul>
<HR>
<h3><a name="Metrowerks Codewarrior 7.0">Metrowerks Codewarrior 7.0</a></h3>
<p>Bad news - Metrowerks Codewarrior 7.0 has a bug in preprocessor (to be more
concrete, in function-like macro replacement mechanism) that restricts usage
of the library to only very simple cases, at least if you don't write code that
specifically address this issue; for example, the above NUMBERED_EXPRESSION
example doesn't compile on CW 7.0. Below is a simple test case that reproduces
the bug:</p>
<blockquote>
<pre>#define IDENTITY_MACRO(x) IDENTITY_MACRO_BODY(x)
#define IDENTITY_MACRO_BODY(x) x
#define COMMA_TOKEN() ,
int a IDENTITY_MACRO(COMMA_TOKEN)() b; // this works
int c IDENTITY_MACRO(IDENTITY_MACRO(COMMA_TOKEN))() d; // this doesn't
</pre>
</blockquote>
<p>Basically, what's happening here is that function-like COMMA_TOKEN macro gets
expanded _inside_ of the nested IDENTITY_MACRO call - even although it's NOT
followed by a '(' as the next preprocessing token - which is a clearly an incorrect
behavior (see 16.3 [cpp.replace] para 9 for the detailed description of the
function-like macro replacement process). I haven't submitted bug report yet,
but I am going to.</p>
<p>So, this is not a problem of the library, but probably something that needs
to be mentioned in the documentation, may be with some examples of how to workaround
the issue. Just to show one possible way around the problem, here is a NUMBERED_EXPRESSION
macro that does work on MWCW:</p>
<blockquote>
<pre>#define NUMBERED_EXPRESSION(n, x) \
BOOST_PREPROCESSOR_CAT(BOOST_, \
BOOST_PREPROCESSOR_IF( \
n \
, PREPROCESSOR_IDENTITY(x##n) \
, PREPROCESSOR_EMPTY \
))() \
/**/
</pre></blockquote>
<p align="right"><i>Reported by Aleksey Gurtovoy</i></p>
<hr>
<P><EFBFBD> Copyright Housemarque, Inc. 2001</P>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Updated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>
<p></p>
</BODY></HTML>

View File

@ -0,0 +1,58 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>add.hpp File Reference</h1><code>#include &lt;boost/preprocessor/inc.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="add_8hpp.html#a0">BOOST_PREPROCESSOR_ADD</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to the sum of X and Y.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/arithmetic/add.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="add.hpp::BOOST_PREPROCESSOR_ADD"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_ADD</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to the sum of X and Y.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,59 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>and.hpp File Reference</h1><code>#include &lt;boost/preprocessor/logical/nor.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/logical/not.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="and_8hpp.html#a0">BOOST_PREPROCESSOR_AND</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to the logical AND of the operands.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/logical/and.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="and.hpp::BOOST_PREPROCESSOR_AND"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_AND</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to the logical AND of the operands.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,25 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>arithmetic.hpp File Reference</h1><code>#include &lt;boost/preprocessor/arithmetic/add.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/arithmetic/div.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/arithmetic/mul.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/arithmetic/sub.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/arithmetic.hpp">Click here to see the header.</a>
<p>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,60 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>assert_msg.hpp File Reference</h1><code>#include &lt;boost/preprocessor/empty.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/identity.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/if.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="assert__msg_8hpp.html#a0">BOOST_PREPROCESSOR_ASSERT_MSG</a>(C, MSG)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to nothing if C != 0 and to MSG if C == 0.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/assert_msg.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="assert_msg.hpp::BOOST_PREPROCESSOR_ASSERT_MSG"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_ASSERT_MSG</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">C, <tr>
<td></td>
<td></td>
<td class="md" nowrap>MSG&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to nothing if C != 0 and to MSG if C == 0.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,54 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>bool.hpp File Reference</h1><table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="bool_8hpp.html#a0">BOOST_PREPROCESSOR_BOOL</a>(X)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to 0 if X == 0 and 1 if X != 0.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/logical/bool.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="bool.hpp::BOOST_PREPROCESSOR_BOOL"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_BOOL</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to 0 if X == 0 and 1 if X != 0.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,96 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>cat.hpp File Reference</h1><table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="cat_8hpp.html#a0">BOOST_PREPROCESSOR_CAT</a>(L, R)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Delays the catenation of L and R.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/cat.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="cat.hpp::BOOST_PREPROCESSOR_CAT"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_CAT</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">L, <tr>
<td></td>
<td></td>
<td class="md" nowrap>R&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Delays the catenation of L and R.
<p>
Example:
<p>
<pre><div class="fragment"><pre>
#define STATIC_ASSERT(EXPR)\
enum\
{ BOOST_PREPROCESSOR_CAT(static_check_,__LINE__) = (EXPR) ? 1 : -1\
};\
typedef char\
BOOST_PREPROCESSOR_CAT(static_assert_,__LINE__)\
[ BOOST_PREPROCESSOR_CAT(static_check_,__LINE__)\
]
// ...
STATIC_ASSERT(sizeof(int) &lt;= sizeof(long));
</pre></div></pre>
<p>
The above expands to:
<p>
<pre><div class="fragment"><pre>
enum
{ static_check_152 = (sizeof(int) &lt;= sizeof(long)) ? 1 : -1
};
typedef char
static_assert_152
[ static_check_152
];
</pre></div></pre>
<p>
Using <a class="el" href="cat_8hpp.html#a0">BOOST_PREPROCESSOR_CAT</a>() above lets the preprocessor expand the __LINE__. If the above code would use the ## operator directly then __LINE__ would not be expanded and the above would expand to:
<p>
<pre><div class="fragment"><pre>
enum
{ static_check___LINE__ = (sizeof(int) &lt;= sizeof(long)) ? 1 : -1
};
typedef char
static_assert___LINE__
[ static_check___LINE__
];
</pre></div></pre> </td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,54 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>comma.hpp File Reference</h1><table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="comma_8hpp.html#a0">BOOST_PREPROCESSOR_COMMA</a>()</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to a comma. Can be used with <a class="el" href="if_8hpp.html#a0">BOOST_PREPROCESSOR_IF</a>().</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/comma.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="comma.hpp::BOOST_PREPROCESSOR_COMMA"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_COMMA</td>
<td class="md" valign="top">(&nbsp;</td>
&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to a comma. Can be used with <a class="el" href="if_8hpp.html#a0">BOOST_PREPROCESSOR_IF</a>().
<p>
See <a class="el" href="comma__if_8hpp.html#a0">BOOST_PREPROCESSOR_COMMA_IF</a>(). </td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,57 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>comma_if.hpp File Reference</h1><code>#include &lt;boost/preprocessor/comma.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/empty.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/if.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="comma__if_8hpp.html#a0">BOOST_PREPROCESSOR_COMMA_IF</a>(C)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to a comma if C != 0 and nothing if C == 0.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/comma_if.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="comma_if.hpp::BOOST_PREPROCESSOR_COMMA_IF"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_COMMA_IF</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">C&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to a comma if C != 0 and nothing if C == 0.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,27 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>comparison.hpp File Reference</h1><code>#include &lt;boost/preprocessor/comparison/equal.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/comparison/greater.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/comparison/greater_equal.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/comparison/less.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/comparison/less_equal.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/comparison/not_equal.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/comparison.hpp">Click here to see the header.</a>
<p>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,56 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>dec.hpp File Reference</h1><table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="dec_8hpp.html#a0">BOOST_PREPROCESSOR_DEC</a>(X)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Decrements X expanding to a single token.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/dec.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="dec.hpp::BOOST_PREPROCESSOR_DEC"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_DEC</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Decrements X expanding to a single token.
<p>
<a class="el" href="dec_8hpp.html#a0">BOOST_PREPROCESSOR_DEC</a>() uses saturation arithmetic. Decrementing 0 yeilds a 0.
<p>
Only decimal integer literals in the range [0,BOOST_PREPROCESSOR_LIMIT_MAG] are supported. </td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,62 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>div.hpp File Reference</h1><code>#include &lt;boost/preprocessor/arithmetic/sub.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/comparison/less_equal.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/inc.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/tuple.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/while.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="div_8hpp.html#a0">BOOST_PREPROCESSOR_DIV</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to the quotient of X and Y.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/arithmetic/div.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="div.hpp::BOOST_PREPROCESSOR_DIV"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_DIV</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to the quotient of X and Y.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,101 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>empty.hpp File Reference</h1><table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="empty_8hpp.html#a0">BOOST_PREPROCESSOR_EMPTY</a>()</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to nothing. Used with <a class="el" href="if_8hpp.html#a0">BOOST_PREPROCESSOR_IF</a>() and as an unused parameter.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/empty.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="empty.hpp::BOOST_PREPROCESSOR_EMPTY"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_EMPTY</td>
<td class="md" valign="top">(&nbsp;</td>
&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to nothing. Used with <a class="el" href="if_8hpp.html#a0">BOOST_PREPROCESSOR_IF</a>() and as an unused parameter.
<p>
Example usage as the implementation of <a class="el" href="comma__if_8hpp.html#a0">BOOST_PREPROCESSOR_COMMA_IF</a>(C):
<p>
<pre><div class="fragment"><pre>
#define BOOST_PREPROCESSOR_COMMA_IF(C)\
BOOST_PREPROCESSOR_IF(C,BOOST_PREPROCESSOR_COMMA,BOOST_PREPROCESSOR_EMPTY)()
</pre></div></pre>
<p>
Example usage as an unused macro parameter:
<p>
<pre><div class="fragment"><pre>
#define BOOST_PREPROCESSOR_DEF(CV)\
template&lt;class base&gt; \
CV typename implement_subscript_using_begin_subscript&lt;base&gt;::value_type&amp;\
implement_subscript_using_begin_subscript&lt;base&gt;::operator[]\
( index_type \
i \
) CV \
{ return base::begin()[i]; \
}
BOOST_PREPROCESSOR_DEF(BOOST_PREPROCESSOR_EMPTY())
BOOST_PREPROCESSOR_DEF(const)
#undef BOOST_PREPROCESSOR_DEF
</pre></div></pre>
<p>
The above expands to:
<p>
<pre><div class="fragment"><pre>
template&lt;class base&gt;
typename implement_subscript_using_begin_subscript&lt;base&gt;::value_type&amp;
implement_subscript_using_begin_subscript&lt;base&gt;::operator[]
( index_type
i
)
{ return base::begin()[i];
}
template&lt;class base&gt;
const typename implement_subscript_using_begin_subscript&lt;base&gt;::value_type&amp;
implement_subscript_using_begin_subscript&lt;base&gt;::operator[]
( index_type
i
) const
{ return base::begin()[i];
}
</pre></div></pre>
<p>
In case you wonder, the above code is part of a generalized layer for implementing the subscripting operators of a random access container. </td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,65 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>enum_params.hpp File Reference</h1><code>#include &lt;boost/preprocessor/comma_if.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/repeat.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="enum__params_8hpp.html#a0">BOOST_PREPROCESSOR_ENUM_PARAMS</a>(N, P)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Generates a comma separated list of parameters.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/enum_params.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="enum_params.hpp::BOOST_PREPROCESSOR_ENUM_PARAMS"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_ENUM_PARAMS</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">N, <tr>
<td></td>
<td></td>
<td class="md" nowrap>P&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Generates a comma separated list of parameters.
<p>
In other words, expands to the sequence:
<p>
<pre><div class="fragment"><pre>
P##0, P##1, ..., P##N-1
</pre></div></pre>
<p>
NOTE: The implementation uses <a class="el" href="repeat_8hpp.html#a0">BOOST_PREPROCESSOR_REPEAT</a>(). </td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,70 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>enum_params_with_a_default.hpp File Reference</h1><code>#include &lt;boost/preprocessor/cat.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/comma_if.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/repeat.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/tuple.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="enum__params__with__a__default_8hpp.html#a0">BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT</a>(N, P, D)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Generates a comma separated list of parameters with a default.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/enum_params_with_a_default.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="enum_params_with_a_default.hpp::BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">N, <tr>
<td></td>
<td></td>
<td class="md" nowrap>P, <tr>
<td></td>
<td></td>
<td class="md" nowrap>D&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Generates a comma separated list of parameters with a default.
<p>
In other words, expands to the sequence:
<p>
<pre><div class="fragment"><pre>
P##0 = D, P##1 = D, ..., P##N-1 = D
</pre></div></pre>
<p>
NOTE: The implementation uses <a class="el" href="repeat_8hpp.html#a0">BOOST_PREPROCESSOR_REPEAT</a>(). </td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,70 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>enum_params_with_defaults.hpp File Reference</h1><code>#include &lt;boost/preprocessor/cat.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/comma_if.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/repeat.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/tuple.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="enum__params__with__defaults_8hpp.html#a0">BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS</a>(N, P, D)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Generates a comma separated list of parameters with defaults.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/enum_params_with_defaults.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="enum_params_with_defaults.hpp::BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">N, <tr>
<td></td>
<td></td>
<td class="md" nowrap>P, <tr>
<td></td>
<td></td>
<td class="md" nowrap>D&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Generates a comma separated list of parameters with defaults.
<p>
In other words, expands to the sequence:
<p>
<pre><div class="fragment"><pre>
P##0 = D##0, P##1 = D##1, ..., P##N-1 = D##N-1
</pre></div></pre>
<p>
NOTE: The implementation uses <a class="el" href="repeat_8hpp.html#a0">BOOST_PREPROCESSOR_REPEAT</a>(). </td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,72 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>enum_shifted_params.hpp File Reference</h1><code>#include &lt;boost/preprocessor/cat.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/comma_if.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/dec.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/inc.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/repeat.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="enum__shifted__params_8hpp.html#a0">BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS</a>(N, P)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Generates a comma separated list of shifted actual parameters.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/enum_shifted_params.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="enum_shifted_params.hpp::BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">N, <tr>
<td></td>
<td></td>
<td class="md" nowrap>P&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Generates a comma separated list of shifted actual parameters.
<p>
In other words, expands to the sequence:
<p>
<pre><div class="fragment"><pre>
P##1, P##2, ..., P##N-1
</pre></div></pre>
<p>
NOTE: The implementation uses <a class="el" href="repeat_8hpp.html#a0">BOOST_PREPROCESSOR_REPEAT</a>().
<p>
RATIONALE:<ul>
<li>This macro facilitates a typical usage of the library. Shifted parameter lists are common in template metaprograms. <li>ENUM_SHIFTED_PARAMS must be tested so that the shifted range is shown to be correct. </ul>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,60 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>equal.hpp File Reference</h1><code>#include &lt;boost/preprocessor/arithmetic/add.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/arithmetic/sub.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/logical/not.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="equal_8hpp.html#a0">BOOST_PREPROCESSOR_EQUAL</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to 1 if X==Y and 0 otherwise.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/comparison/equal.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="equal.hpp::BOOST_PREPROCESSOR_EQUAL"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_EQUAL</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to 1 if X==Y and 0 otherwise.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

60
doc/reference/files.html Normal file
View File

@ -0,0 +1,60 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>Boost PREPROCESSOR library: Reference File List</h1>Here is a list of all files with brief descriptions:<table>
<tr bgcolor="#f0f0f0"><td><a class="el" href="add_8hpp.html">add.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="and_8hpp.html">and.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="arithmetic_8hpp.html">arithmetic.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="assert__msg_8hpp.html">assert_msg.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="bool_8hpp.html">bool.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="cat_8hpp.html">cat.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="comma_8hpp.html">comma.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="comma__if_8hpp.html">comma_if.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="comparison_8hpp.html">comparison.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="dec_8hpp.html">dec.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="div_8hpp.html">div.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="empty_8hpp.html">empty.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="enum__params_8hpp.html">enum_params.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="enum__params__with__a__default_8hpp.html">enum_params_with_a_default.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="enum__params__with__defaults_8hpp.html">enum_params_with_defaults.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="enum__shifted__params_8hpp.html">enum_shifted_params.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="equal_8hpp.html">equal.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="greater_8hpp.html">greater.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="greater__equal_8hpp.html">greater_equal.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="identity_8hpp.html">identity.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="if_8hpp.html">if.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="inc_8hpp.html">inc.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="less_8hpp.html">less.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="less__equal_8hpp.html">less_equal.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="limits_8hpp.html">limits.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="logical_8hpp.html">logical.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="max_8hpp.html">max.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="min_8hpp.html">min.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="mul_8hpp.html">mul.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="nor_8hpp.html">nor.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="not_8hpp.html">not.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="not__equal_8hpp.html">not_equal.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="or_8hpp.html">or.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="preprocessor_8hpp.html">preprocessor.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="repeat_8hpp.html">repeat.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="repeat__2nd_8hpp.html">repeat_2nd.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="repeat__3rd_8hpp.html">repeat_3rd.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="stringize_8hpp.html">stringize.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="sub_8hpp.html">sub.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="tuple_8hpp.html">tuple.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="while_8hpp.html">while.hpp</a></td><td></td></tr>
<tr bgcolor="#f0f0f0"><td><a class="el" href="xor_8hpp.html">xor.hpp</a></td><td></td></tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,58 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>Boost PREPROCESSOR library: Reference File Members</h1>Here is a list of all file members with links to the files they belong to:<ul>
<li>BOOST_PREPROCESSOR_ADD
: <a class="el" href="add_8hpp.html#a0">add.hpp</a><li>BOOST_PREPROCESSOR_AND
: <a class="el" href="and_8hpp.html#a0">and.hpp</a><li>BOOST_PREPROCESSOR_ASSERT_MSG
: <a class="el" href="assert__msg_8hpp.html#a0">assert_msg.hpp</a><li>BOOST_PREPROCESSOR_BOOL
: <a class="el" href="bool_8hpp.html#a0">bool.hpp</a><li>BOOST_PREPROCESSOR_CAT
: <a class="el" href="cat_8hpp.html#a0">cat.hpp</a><li>BOOST_PREPROCESSOR_COMMA
: <a class="el" href="comma_8hpp.html#a0">comma.hpp</a><li>BOOST_PREPROCESSOR_COMMA_IF
: <a class="el" href="comma__if_8hpp.html#a0">comma_if.hpp</a><li>BOOST_PREPROCESSOR_DEC
: <a class="el" href="dec_8hpp.html#a0">dec.hpp</a><li>BOOST_PREPROCESSOR_DIV
: <a class="el" href="div_8hpp.html#a0">div.hpp</a><li>BOOST_PREPROCESSOR_EMPTY
: <a class="el" href="empty_8hpp.html#a0">empty.hpp</a><li>BOOST_PREPROCESSOR_ENUM_PARAMS
: <a class="el" href="enum__params_8hpp.html#a0">enum_params.hpp</a><li>BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT
: <a class="el" href="enum__params__with__a__default_8hpp.html#a0">enum_params_with_a_default.hpp</a><li>BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS
: <a class="el" href="enum__params__with__defaults_8hpp.html#a0">enum_params_with_defaults.hpp</a><li>BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS
: <a class="el" href="enum__shifted__params_8hpp.html#a0">enum_shifted_params.hpp</a><li>BOOST_PREPROCESSOR_EQUAL
: <a class="el" href="equal_8hpp.html#a0">equal.hpp</a><li>BOOST_PREPROCESSOR_GREATER
: <a class="el" href="greater_8hpp.html#a0">greater.hpp</a><li>BOOST_PREPROCESSOR_GREATER_EQUAL
: <a class="el" href="greater__equal_8hpp.html#a0">greater_equal.hpp</a><li>BOOST_PREPROCESSOR_IDENTITY
: <a class="el" href="identity_8hpp.html#a0">identity.hpp</a><li>BOOST_PREPROCESSOR_IF
: <a class="el" href="if_8hpp.html#a0">if.hpp</a><li>BOOST_PREPROCESSOR_INC
: <a class="el" href="inc_8hpp.html#a0">inc.hpp</a><li>BOOST_PREPROCESSOR_LESS
: <a class="el" href="less_8hpp.html#a0">less.hpp</a><li>BOOST_PREPROCESSOR_LESS_EQUAL
: <a class="el" href="less__equal_8hpp.html#a0">less_equal.hpp</a><li>BOOST_PREPROCESSOR_LIMIT_DIM
: <a class="el" href="limits_8hpp.html#a0">limits.hpp</a><li>BOOST_PREPROCESSOR_LIMIT_MAG
: <a class="el" href="limits_8hpp.html#a1">limits.hpp</a><li>BOOST_PREPROCESSOR_LIMIT_TUPLE
: <a class="el" href="limits_8hpp.html#a2">limits.hpp</a><li>BOOST_PREPROCESSOR_MAX
: <a class="el" href="max_8hpp.html#a0">max.hpp</a><li>BOOST_PREPROCESSOR_MIN
: <a class="el" href="min_8hpp.html#a0">min.hpp</a><li>BOOST_PREPROCESSOR_MUL
: <a class="el" href="mul_8hpp.html#a0">mul.hpp</a><li>BOOST_PREPROCESSOR_NOR
: <a class="el" href="nor_8hpp.html#a0">nor.hpp</a><li>BOOST_PREPROCESSOR_NOT
: <a class="el" href="not_8hpp.html#a0">not.hpp</a><li>BOOST_PREPROCESSOR_NOT_EQUAL
: <a class="el" href="not__equal_8hpp.html#a0">not_equal.hpp</a><li>BOOST_PREPROCESSOR_OR
: <a class="el" href="or_8hpp.html#a0">or.hpp</a><li>BOOST_PREPROCESSOR_REPEAT
: <a class="el" href="repeat_8hpp.html#a0">repeat.hpp</a><li>BOOST_PREPROCESSOR_REPEAT_2ND
: <a class="el" href="repeat__2nd_8hpp.html#a0">repeat_2nd.hpp</a><li>BOOST_PREPROCESSOR_REPEAT_3RD
: <a class="el" href="repeat__3rd_8hpp.html#a0">repeat_3rd.hpp</a><li>BOOST_PREPROCESSOR_STRINGIZE
: <a class="el" href="stringize_8hpp.html#a0">stringize.hpp</a><li>BOOST_PREPROCESSOR_SUB
: <a class="el" href="sub_8hpp.html#a0">sub.hpp</a><li>BOOST_PREPROCESSOR_TUPLE_ELEM
: <a class="el" href="tuple_8hpp.html#a0">tuple.hpp</a><li>BOOST_PREPROCESSOR_WHILE
: <a class="el" href="while_8hpp.html#a0">while.hpp</a><li>BOOST_PREPROCESSOR_XOR
: <a class="el" href="xor_8hpp.html#a0">xor.hpp</a></ul>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,58 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>greater.hpp File Reference</h1><code>#include &lt;boost/preprocessor/comparison/less.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="greater_8hpp.html#a0">BOOST_PREPROCESSOR_GREATER</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to 1 if X&gt;Y and 0 otherwise.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/comparison/greater.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="greater.hpp::BOOST_PREPROCESSOR_GREATER"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_GREATER</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to 1 if X&gt;Y and 0 otherwise.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,58 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>greater_equal.hpp File Reference</h1><code>#include &lt;boost/preprocessor/comparison/less_equal.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="greater__equal_8hpp.html#a0">BOOST_PREPROCESSOR_GREATER_EQUAL</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to 1 if X&gt;=Y and 0 otherwise.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/comparison/greater_equal.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="greater_equal.hpp::BOOST_PREPROCESSOR_GREATER_EQUAL"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_GREATER_EQUAL</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to 1 if X&gt;=Y and 0 otherwise.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,70 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>identity.hpp File Reference</h1><code>#include &lt;boost/preprocessor/empty.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="identity_8hpp.html#a0">BOOST_PREPROCESSOR_IDENTITY</a>(X)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to X once invoked.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/identity.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="identity.hpp::BOOST_PREPROCESSOR_IDENTITY"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_IDENTITY</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to X once invoked.
<p>
Designed to be used with <a class="el" href="if_8hpp.html#a0">BOOST_PREPROCESSOR_IF</a>(), when one of the clauses need to be invoked.
<p>
Example:
<p>
<pre><div class="fragment"><pre>
BOOST_PREPROCESSOR_IDENTITY(X)()
// ^^ NOTE!
</pre></div></pre>
<p>
The above expands to:
<p>
<pre><div class="fragment"><pre>
X
</pre></div></pre>
<p>
NOTE: If <a class="el" href="identity_8hpp.html#a0">BOOST_PREPROCESSOR_IDENTITY</a>() is not invoked, the expansion will not be usable. </td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,61 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>if.hpp File Reference</h1><code>#include &lt;boost/preprocessor/logical/bool.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="if_8hpp.html#a0">BOOST_PREPROCESSOR_IF</a>(C, T, E)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to T if C != 0 and E if C == 0.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/if.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="if.hpp::BOOST_PREPROCESSOR_IF"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_IF</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">C, <tr>
<td></td>
<td></td>
<td class="md" nowrap>T, <tr>
<td></td>
<td></td>
<td class="md" nowrap>E&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to T if C != 0 and E if C == 0.
<p>
<a class="el" href="if_8hpp.html#a0">BOOST_PREPROCESSOR_IF</a>() enables convenient generation of lists using <a class="el" href="repeat_8hpp.html#a0">BOOST_PREPROCESSOR_REPEAT</a>(). </td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,56 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>inc.hpp File Reference</h1><table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="inc_8hpp.html#a0">BOOST_PREPROCESSOR_INC</a>(X)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Increments X expanding to a single token.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/inc.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="inc.hpp::BOOST_PREPROCESSOR_INC"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_INC</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Increments X expanding to a single token.
<p>
<a class="el" href="inc_8hpp.html#a0">BOOST_PREPROCESSOR_INC</a>() uses saturation arithmetic. Incrementing a BOOST_PREPROCESSOR_LIMIT_MAG yields a BOOST_PREPROCESSOR_LIMIT_MAG.
<p>
Only decimal integer literals in the range [0,BOOST_PREPROCESSOR_LIMIT_MAG] are supported. </td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

18
doc/reference/index.html Normal file
View File

@ -0,0 +1,18 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>Boost PREPROCESSOR library: Reference Documentation</h1>
<p>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,60 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>less.hpp File Reference</h1><code>#include &lt;boost/preprocessor/comparison/equal.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/comparison/less_equal.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/if.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="less_8hpp.html#a0">BOOST_PREPROCESSOR_LESS</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to 1 if X&lt;Y and 0 otherwise.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/comparison/less.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="less.hpp::BOOST_PREPROCESSOR_LESS"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_LESS</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to 1 if X&lt;Y and 0 otherwise.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,59 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>less_equal.hpp File Reference</h1><code>#include &lt;boost/preprocessor/arithmetic/sub.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/logical/not.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="less__equal_8hpp.html#a0">BOOST_PREPROCESSOR_LESS_EQUAL</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to 1 if X&lt;=Y and 0 otherwise.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/comparison/less_equal.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="less_equal.hpp::BOOST_PREPROCESSOR_LESS_EQUAL"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_LESS_EQUAL</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to 1 if X&lt;=Y and 0 otherwise.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,103 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>limits.hpp File Reference</h1><table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="limits_8hpp.html#a0">BOOST_PREPROCESSOR_LIMIT_DIM</a></td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to the number of dimensions of repeat supported by the library.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="limits_8hpp.html#a1">BOOST_PREPROCESSOR_LIMIT_MAG</a></td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to the maximum straight numeric literal supported by the library.</em> <a href="#a1">More...</a><em></em></font><br><br></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="limits_8hpp.html#a2">BOOST_PREPROCESSOR_LIMIT_TUPLE</a></td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to the maximum tuple length supported by the library.</em> <a href="#a2">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/limits.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="limits.hpp::BOOST_PREPROCESSOR_LIMIT_DIM"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_LIMIT_DIM
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to the number of dimensions of repeat supported by the library.
<p>
</td>
</tr>
</table>
<a name="a1" doxytag="limits.hpp::BOOST_PREPROCESSOR_LIMIT_MAG"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_LIMIT_MAG
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to the maximum straight numeric literal supported by the library.
<p>
NOTES:<ul>
<li>Only decimal integer literals in the range [0,BOOST_PREPROCESSOR_LIMIT_MAG] are supported.<li>All arithmetic operations (ADD,SUB,MUL,DIV) use saturation arithmetic.<li>The maximum repetition count supported by the library may not be reached due to compiler limitations. </ul>
</td>
</tr>
</table>
<a name="a2" doxytag="limits.hpp::BOOST_PREPROCESSOR_LIMIT_TUPLE"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_LIMIT_TUPLE
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to the maximum tuple length supported by the library.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,27 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>logical.hpp File Reference</h1><code>#include &lt;boost/preprocessor/logical/and.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/logical/bool.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/logical/nor.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/logical/not.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/logical/or.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/logical/xor.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/logical.hpp">Click here to see the header.</a>
<p>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,59 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>max.hpp File Reference</h1><code>#include &lt;boost/preprocessor/comparison/less.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/if.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="max_8hpp.html#a0">BOOST_PREPROCESSOR_MAX</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to the maximum of X and Y.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/max.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="max.hpp::BOOST_PREPROCESSOR_MAX"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_MAX</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to the maximum of X and Y.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,59 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>min.hpp File Reference</h1><code>#include &lt;boost/preprocessor/comparison/less.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/if.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="min_8hpp.html#a0">BOOST_PREPROCESSOR_MIN</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to the minimum of X and Y.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/min.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="min.hpp::BOOST_PREPROCESSOR_MIN"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_MIN</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to the minimum of X and Y.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,58 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>mul.hpp File Reference</h1><code>#include &lt;boost/preprocessor/arithmetic/add.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="mul_8hpp.html#a0">BOOST_PREPROCESSOR_MUL</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to the product of X and Y.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/arithmetic/mul.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="mul.hpp::BOOST_PREPROCESSOR_MUL"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_MUL</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to the product of X and Y.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,58 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>nor.hpp File Reference</h1><code>#include &lt;boost/preprocessor/logical/bool.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="nor_8hpp.html#a0">BOOST_PREPROCESSOR_NOR</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to the logical NEITHER OR of the operands.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/logical/nor.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="nor.hpp::BOOST_PREPROCESSOR_NOR"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_NOR</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to the logical NEITHER OR of the operands.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,55 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>not.hpp File Reference</h1><code>#include &lt;boost/preprocessor/logical/nor.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="not_8hpp.html#a0">BOOST_PREPROCESSOR_NOT</a>(X)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to the logical NOT of the operand.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/logical/not.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="not.hpp::BOOST_PREPROCESSOR_NOT"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_NOT</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to the logical NOT of the operand.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,60 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>not_equal.hpp File Reference</h1><code>#include &lt;boost/preprocessor/arithmetic/add.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/arithmetic/sub.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/logical/bool.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="not__equal_8hpp.html#a0">BOOST_PREPROCESSOR_NOT_EQUAL</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to 1 if X!=Y and 0 otherwise.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/comparison/not_equal.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="not_equal.hpp::BOOST_PREPROCESSOR_NOT_EQUAL"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_NOT_EQUAL</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to 1 if X!=Y and 0 otherwise.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,59 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>or.hpp File Reference</h1><code>#include &lt;boost/preprocessor/logical/nor.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/logical/not.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="or_8hpp.html#a0">BOOST_PREPROCESSOR_OR</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to the logical OR of the operands.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/logical/or.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="or.hpp::BOOST_PREPROCESSOR_OR"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_OR</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to the logical OR of the operands.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,48 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>preprocessor.hpp File Reference</h1><code>#include &lt;boost/preprocessor/arithmetic.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/assert_msg.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/cat.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/comma.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/comma_if.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/comparison.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/dec.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/empty.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/enum_params.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/enum_params_with_a_default.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/enum_params_with_defaults.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/enum_shifted_params.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/identity.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/if.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/inc.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/limits.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/logical.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/max.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/min.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/repeat.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/repeat_2nd.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/repeat_3rd.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/stringize.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/tuple.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/while.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor.hpp">Click here to see the header.</a>
<p>
Includes all PREPROCESSOR library headers.
<p>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,70 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>repeat.hpp File Reference</h1><table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="repeat_8hpp.html#a0">BOOST_PREPROCESSOR_REPEAT</a>(N, M, P)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Repeats the macro M(I,P) for I = 0 to N-1.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/repeat.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="repeat.hpp::BOOST_PREPROCESSOR_REPEAT"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_REPEAT</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">N, <tr>
<td></td>
<td></td>
<td class="md" nowrap>M, <tr>
<td></td>
<td></td>
<td class="md" nowrap>P&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Repeats the macro M(I,P) for I = 0 to N-1.
<p>
In other words, expands to the sequence:
<p>
<pre><div class="fragment"><pre>
M(0,P) M(1,P) ... M(N-1,P)
</pre></div></pre>
<p>
See BOOST_PREPROCESSOR_LIMIT_MAG.
<p>
RATIONALE:<ul>
<li>BOOST_PREPROCESSOR_REPEAT, BOOST_PREPROCESSOR_REPEAT_2ND, ... must work together.<li>BOOST_PREPROCESSOR_REPEAT is already tested with BOOST_PREPROCESSOR_ENUM_PARAMS.<li>The tested repeat count should exceed imaginable usage.<li>Testing the generation of is_function_helper()s upto 40 arguments should be sufficient in this case. Many compilers may fail the repetition tests (at least with higher counts). However, the primary purpose of the repetition primitives is to enable configurability with reasonable defaults, and not necessarily "the most impressive repetition". </ul>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,60 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>repeat_2nd.hpp File Reference</h1><table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="repeat__2nd_8hpp.html#a0">BOOST_PREPROCESSOR_REPEAT_2ND</a>(N, M, P)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Same as <a class="el" href="repeat_8hpp.html#a0">BOOST_PREPROCESSOR_REPEAT</a>(), but implemented independently.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/repeat_2nd.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="repeat_2nd.hpp::BOOST_PREPROCESSOR_REPEAT_2ND"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_REPEAT_2ND</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">N, <tr>
<td></td>
<td></td>
<td class="md" nowrap>M, <tr>
<td></td>
<td></td>
<td class="md" nowrap>P&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Same as <a class="el" href="repeat_8hpp.html#a0">BOOST_PREPROCESSOR_REPEAT</a>(), but implemented independently.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,60 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>repeat_3rd.hpp File Reference</h1><table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="repeat__3rd_8hpp.html#a0">BOOST_PREPROCESSOR_REPEAT_3RD</a>(N, M, P)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Same as <a class="el" href="repeat_8hpp.html#a0">BOOST_PREPROCESSOR_REPEAT</a>(), but implemented independently.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/repeat_3rd.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="repeat_3rd.hpp::BOOST_PREPROCESSOR_REPEAT_3RD"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_REPEAT_3RD</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">N, <tr>
<td></td>
<td></td>
<td class="md" nowrap>M, <tr>
<td></td>
<td></td>
<td class="md" nowrap>P&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Same as <a class="el" href="repeat_8hpp.html#a0">BOOST_PREPROCESSOR_REPEAT</a>(), but implemented independently.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,75 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>stringize.hpp File Reference</h1><table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="stringize_8hpp.html#a0">BOOST_PREPROCESSOR_STRINGIZE</a>(E)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Delays the stringization of E.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/stringize.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="stringize.hpp::BOOST_PREPROCESSOR_STRINGIZE"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_STRINGIZE</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">E&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Delays the stringization of E.
<p>
Example:
<p>
<pre><div class="fragment"><pre>
#define NOTE(STR)\
message(__FILE__ "(" BOOST_PREPROCESSOR_STRINGIZE(__LINE__) ") : " STR)
// ...
#pragma NOTE("TBD!")
</pre></div></pre>
<p>
The above expands to:
<p>
<pre><div class="fragment"><pre>
#pragma message("examples.cpp" "(" "20" ") : " "TBD!")
</pre></div></pre>
<p>
The use of <a class="el" href="stringize_8hpp.html#a0">BOOST_PREPROCESSOR_STRINGIZE</a>() above lets the preprocessor expand the __LINE__ before stringizing it. If # would be used directly, the code would expand to:
<p>
<pre><div class="fragment"><pre>
#pragma message("examples.cpp" "(" "__LINE__" ") : " "TBD!")
</pre></div></pre> </td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,58 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>sub.hpp File Reference</h1><code>#include &lt;boost/preprocessor/dec.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="sub_8hpp.html#a0">BOOST_PREPROCESSOR_SUB</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to the difference of X and Y.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/arithmetic/sub.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="sub.hpp::BOOST_PREPROCESSOR_SUB"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_SUB</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to the difference of X and Y.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,79 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>tuple.hpp File Reference</h1><code>#include &lt;boost/preprocessor/identity.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="tuple_8hpp.html#a0">BOOST_PREPROCESSOR_TUPLE_ELEM</a>(N, I, T)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to the I:th element of an N-tuple.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/tuple.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="tuple.hpp::BOOST_PREPROCESSOR_TUPLE_ELEM"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_TUPLE_ELEM</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">N, <tr>
<td></td>
<td></td>
<td class="md" nowrap>I, <tr>
<td></td>
<td></td>
<td class="md" nowrap>T&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to the I:th element of an N-tuple.
<p>
Examples of tuples:
<p>
<pre><div class="fragment"><pre>
2-tuple: (A, B)
3-tuple: (1, 2, 3)
4-tuple: (A B C, D, EF, 34)
</pre></div></pre>
<p>
Example:
<p>
<pre><div class="fragment"><pre>
BOOST_PREPROCESSOR_TUPLE_ELEM(2,1,(A,B))
</pre></div></pre>
<p>
The above expands to:
<p>
<pre><div class="fragment"><pre>
B
</pre></div></pre> </td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,61 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>while.hpp File Reference</h1><code>#include &lt;boost/preprocessor/if.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="while_8hpp.html#a0">BOOST_PREPROCESSOR_WHILE</a>(C, F, X)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>CURRENTLY THIS FEATURE IS FOR INTERNAL USE ONLY!</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/while.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="while.hpp::BOOST_PREPROCESSOR_WHILE"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_WHILE</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">C, <tr>
<td></td>
<td></td>
<td class="md" nowrap>F, <tr>
<td></td>
<td></td>
<td class="md" nowrap>X&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
CURRENTLY THIS FEATURE IS FOR INTERNAL USE ONLY!
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

View File

@ -0,0 +1,59 @@
<a href="../index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../../c++boost.gif"
width=277 align=center></a>
<hr>
<!-- Generated by Doxygen 1.2.12 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>xor.hpp File Reference</h1><code>#include &lt;boost/preprocessor/logical/and.hpp&gt;</code><br>
<code>#include &lt;boost/preprocessor/logical/nor.hpp&gt;</code><br>
<table border=0 cellpadding=0 cellspacing=0>
<tr><td colspan=2><br><h2>Defines</h2></td></tr>
<tr><td nowrap align=right valign=top>#define&nbsp;</td><td valign=bottom><a class="el" href="xor_8hpp.html#a0">BOOST_PREPROCESSOR_XOR</a>(X, Y)</td></tr>
<tr><td>&nbsp;</td><td><font size=-1><em>Expands to the logical EXCLUSIVE OR of the operands.</em> <a href="#a0">More...</a><em></em></font><br><br></td></tr>
</table>
<hr><a name="_details"></a><h2>Detailed Description</h2>
<a href="../../../../boost/preprocessor/logical/xor.hpp">Click here to see the header.</a>
<p>
<hr><h2>Define Documentation</h2>
<a name="a0" doxytag="xor.hpp::BOOST_PREPROCESSOR_XOR"></a><p>
<table width="100%" cellpadding="2" cellspacing="0" border="0">
<tr>
<td class="md">
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="md" nowrap valign="top"> #define BOOST_PREPROCESSOR_XOR</td>
<td class="md" valign="top">(&nbsp;</td>
<td class="md" nowrap valign="top">X, <tr>
<td></td>
<td></td>
<td class="md" nowrap>Y&nbsp;</td>
<td class="mdname1" valign="top" nowrap>&nbsp; </td>
<td class="md" valign="top">)&nbsp;</td>
<td class="md" nowrap>
</table>
</td>
</tr>
</table>
<table cellspacing=5 cellpadding=0 border=0>
<tr>
<td>
&nbsp;
</td>
<td>
<p>
Expands to the logical EXCLUSIVE OR of the operands.
<p>
</td>
</tr>
</table>
<hr>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Generated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>

35
doc/references.htm Normal file
View File

@ -0,0 +1,35 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Boost PREPROCESSOR library</TITLE>
<BODY bgcolor="#FFFFFF">
<a href="index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../c++boost.gif"
width=277 align=center></a>
<hr>
<h1>Boost PREPROCESSOR library: References</h1>
<OL>
<LI> <a name="[1]">Stroustrup: The Design and Evolution of C++, ISBN 0-201-54330-3</a>
<LI> <a name="[2]">Czarnecki, Eisenecker: Generative Programming, ISBN 0-201-30977-7</a>
<LI> <a name="[3]">Barton, Nackman: Scientific and Engineering C++, ISBN 0-201-53393-6</a>
<LI> <a name="[4]">McConnell: Code Complete, ISBN 1-55615-484-4</a></LI>
<LI> <a name="[4]">ISO/IEC 14882:1998 <i>Programming languages - C++</i></a></LI>
</OL>
<P>
<hr>
<P></P>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Updated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" -->
</p>
<p></p>
</BODY></HTML>

485
doc/tutorial.htm Normal file
View File

@ -0,0 +1,485 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Boost PREPROCESSOR library</TITLE>
<BODY bgcolor="#FFFFFF">
<a href="index.htm"><IMG height=86
alt="c++boost.gif (8819 bytes)"
src="../../../c++boost.gif"
width=277 align=center></a>
<hr>
<h1>Boost PREPROCESSOR library: Tutorial</h1>
<hr>
<h2>Contents</h2>
<ul>
<li><a href="#Motivation">Motivation</a></li>
<li><a href="#Techniques">Preprocessor Metaprogramming Techniques</a>
<ul>
<li><a href="#Local Macro">Use a Local Macro to avoid small scale repetition</a></li>
<li><a href="#UNUSED">Use BOOST_PREPROCESSOR_EMPTY() as an unused parameter in Local Macro
instantiations</a></li>
<li><a href="#CAT">Use BOOST_PREPROCESSOR_CAT instead of ## when necessary</a></li>
<li><a href="#STRINGIZE">Use BOOST_PREPROCESSOR_STRINGIZE instead of # whenever necessary</a></li>
<li><a href="#ENUM_PARAMS">Avoid O(N) repetition on lists in general</a></li>
<li><a href="#Conditional Define">Use a Conditional Define to enable user configuration of code repetition</a></li>
<li><a href="#Token Look-Up">Use Token Look-Up Function to eliminate categorical repetition</a></li>
<li><a href="#2ND_REPEAT">Use BOOST_PREPROCESSOR_REPEAT_2ND to avoid O(N*N) repetition</a></li>
<li><a href="#IF">Use BOOST_PREPROCESSOR_IF to implement special case for the first element</a>
<li><a href="#Arithmetic">Use arithmetic, logical and comparison operations when necessary</a>
</li>
</ul>
</li>
</ul>
<hr>
<h2><a name="Motivation">Motivation</a></h2>
<p>The C++ function and template parameter lists are special syntactic constructs
and it is impossible to directly manipulate or generate them using C++ constructs.
This leads to unnecessary code repetition.</p>
<p> Consider the implementation of the is_function<> metafunction in Boost. The
implementation uses an overloaded is_function_tester() function that is used
for testing if a type is convertible to pointer to a function. Because of the
special treatment of parameter lists, it is not possible to directly match a
function with an arbitrary parameter list. Instead, the is_function_tester()
must be overloaded for every distinct number of parameters that is to be supported.
Example:</p>
<blockquote>
<pre>template &lt;class R&gt;
yes_type is_function_tester(R (*)());
template &lt;class R, class A0&gt;
yes_type is_function_tester(R (*)(A0));
template &lt;class R, class A0, A1&gt;
yes_type is_function_tester(R (*)(A0, A1));
template &lt;class R, class A0, A1, A2&gt;
yes_type is_function_tester(R (*)(A0, A1, A2));
// ...
</pre>
</blockquote>
<P>The need for this kind of repetition occurs particularly frequently while implementing
generic components or metaprogramming facilities, but the need also manifests
itself in many far simpler situations. </P>
<h3>Typical solutions</h3>
<p>Typically the repetition is done manually. Manual code repetition is highly
unproductive, but sometimes more readable to the untrained eye.</p>
<p>Another solution is to write an external program for generating the repeated
code or use some other extra linquistic means such as a smart editor. Unfortunately,
using external code generators has many disadvantages:</p>
<ul>
<li>writing the generator takes time (this could be helped by using a standard
generator)</li>
<li>it is no longer productive to manipulate C++ code directly</li>
<li>invoking the generator may be difficult</li>
<li>automating the invocation of the generator can be difficult in certain environments
(automatic invocation is desirable for active libraries)</li>
</ul>
<h3>What about the preprocessor?</h3>
<p>Because C++ comes with a preprocessor, one would assume that it would support
these kind of needs directly. Using the preprocessor in this case is highly
desirable because:</p>
<ul>
<li>preprocessor is highly portable</li>
<li>preprocessor is automatically invoked as part of the compiling process</li>
<li>preprocessor metacode can be directly embedded into the C++ source code</li>
<li>Compilers generally allow to view or output the preprocessed code, which
can be used for debugging or to copy-paste the generated code.</li>
</ul>
<p>Most unfortunately, the preprocessor is a very low level preprocessor that
specifically does not support repetition or recursive macros. Library support
is needed!</p>
<p><i>For detailed information on the capabilities and limitations of the preprocessor,
please refer to the C++ standard <A href="references.htm#[5]">[5]</A>.</i></p>
<h3>The motivation example revisited</h3>
<p>Using the primitives of the PREPROCESSOR library, the is_function_tester()s
could be implemented like this:</p>
<blockquote>
<pre>#define IS_FUNCTION_TESTER(N,_)\
template&lt;class R BOOST_PREPROCESSOR_COMMA_IF(N) BOOST_PREPROCESSOR_ENUM_PARAMS(N, class A)&gt;\
yes_type is_function_tester(R (*)(BOOST_PREPROCESSOR_ENUM_PARAMS(N,A)));
BOOST_PREPROCESSOR_REPEAT_2ND(BOOST_PREPROCESSOR_INC(MAX_IS_FUNCTION_TESTER_PARAMS),IS_FUNCTION_TESTER,_)
#undef IS_FUNCTION_TESTER
</pre>
</blockquote>
<p>In order to change the maximum number of function parameters supported, you
now simply change the MAX_IS_FUNCTION_TESTER_PARAMS definition and recompile.</p>
<HR>
<H2><a name="Techniques">Preprocessor Metaprogramming Techniques</a></H2>
<P>The&nbsp;preprocessor metaprogramming techniques are presented in example format.
</P>
<HR>
<P><B><a name="Local Macro"></a><a href="examples_preprocessed.htm#Local Macro">EXAMPLE</a>:</B>
Use a Local Macro to avoid small scale repetition</P>
<blockquote>
<pre>#define BOOST_PREPROCESSOR_DEF(OP)\
template&lt;class T, int n&gt; \
vec&lt;T,n&gt;&amp; \
operator OP##= \
( vec&lt;T,n&gt;&amp; \
lhs \
, const vec&lt;T,n&gt;&amp; \
rhs \
) \
{ for (int i=0; i&lt;n; ++i) \
lhs(i) OP##= rhs(i); \
return lhs; \
}
BOOST_PREPROCESSOR_DEF(+)
BOOST_PREPROCESSOR_DEF(-)
BOOST_PREPROCESSOR_DEF(*)
BOOST_PREPROCESSOR_DEF(/)
#undef BOOST_PREPROCESSOR_DEF
</pre>
</blockquote>
<P><B>TIP:</B> It is usually okay to use a standard macro name like BOOST_PREPROCESSOR_DEF
for this kind of code, because the macro is both defined and undefined in the
immediate site of its use.</P>
<P><B>TIP:</B> It is easier to verify proper use of
the line continuation operator when they are aligned.</P>
<P><B>NOTES:</B> You can extend this example by defining more and different kinds
of operators. Before doing so, consider using the Algebraic Categories technique
introduced in <A href="references.htm#[3]">[3]</A> or a Layered Architecture (see for instance
<A href="references.htm#[2]">[2]</A>). However, at some point you must type the operator tokens
*, /, +, -, ..., because it is impossible to generate them using templates.
The resulting Categorical Repetition of tokens can be eliminated by using preprocessor
metaprogramming.</P>
<HR>
<P><B><a name="UNUSED"></a><a href="examples_preprocessed.htm#UNUSED">EXAMPLE</a>:</B>
Use BOOST_PREPROCESSOR_EMPTY() as an unused parameter in Local Macro instantiations</P>
<blockquote>
<pre>#define BOOST_PREPROCESSOR_DEF(CV)\
template&lt;class base&gt; \
CV typename implement_subscript_using_begin_subscript&lt;base&gt;::value_type&amp;\
implement_subscript_using_begin_subscript&lt;base&gt;::operator[]\
( index_type \
i \
) CV \
{ return base::begin()[i]; \
}
BOOST_PREPROCESSOR_DEF(BOOST_PREPROCESSOR_EMPTY())
BOOST_PREPROCESSOR_DEF(const)
#undef BOOST_PREPROCESSOR_DEF
</pre>
</blockquote>
<P><B>HOW:</B> BOOST_PREPROCESSOR_EMPTY() expands to nothing and can be used as
an unused parameter.</P>
<P><b>NOTE:</b> BOOST_PREPROCESSOR_EMPTY without the () never get expanded. The
() is necessary to invoke a function style macro.</P>
<B>CAVEAT:</B> You can not safely use concatenation while using BOOST_PREPROCESSOR_EMPTY().
<P><B>TIP:</B> Occasionally one or two lines are
considerably longer than the rest. It can often save some work to not align all
of the line continuation operators without making the code too unreadable.</P>
<P><B>TIP:</B> Use syntax hilite on preprocessor metaprogramming macro and parameter
identifiers such as</P>
<ul>
<li> BOOST_PREPROCESSOR_DEF,</li>
<li>BOOST_PREPROCESSOR_EMPTY,</li>
<li> BOOST_PREPROCESSOR_REPEAT,</li>
<li> OP,</li>
<li> CV,</li>
<li> ...</li>
</ul>
<p>It can greatly improve readability.</p>
<HR>
<P><a name="CAT"></a><a href="examples_preprocessed.htm#CAT"><B>EXAMPLE:</B></a> Use BOOST_PREPROCESSOR_CAT instead of ## when necessary</P>
<blockquote>
<pre>#define STATIC_ASSERT(EXPR)\
enum\
{ BOOST_PREPROCESSOR_CAT(static_check_,__LINE__) = (EXPR) ? 1 : -1\
};\
typedef char\
BOOST_PREPROCESSOR_CAT(static_assert_,__LINE__)\
[ BOOST_PREPROCESSOR_CAT(static_check_,__LINE__)\
]
// ...
STATIC_ASSERT(sizeof(int) &lt;= sizeof(long));
</pre>
</blockquote>
<P><B>WHY:</B> Macro expansion proceeds recursively in "layers". Token pasting
prevents the&nbsp;preprocessor from performing macro expansion, therefore it
is often necessary to delay token concatenation.</P>
<hr>
<p><a name="STRINGIZE"></a><a href="examples_preprocessed.htm#STRINGIZE"><B>EXAMPLE:</B></a> Use BOOST_PREPROCESSOR_STRINGIZE instead of # whenever necessary</p>
<blockquote>
<pre>#define NOTE(STR)\
message(__FILE__ &quot;(&quot; BOOST_PREPROCESSOR_STRINGIZE(__LINE__) &quot;) : &quot; STR)
// ...
#pragma NOTE("TBD!")
</pre>
</blockquote>
<p><b>WHY:</b> Macro expansion proceeds recursively in &quot;layers&quot;. Stringization
prevents the preprocessor from performing macro expansion, therefore it is often
necessary to delay stringization.</p>
<HR>
<P><B><a name="ENUM_PARAMS"></a><a href="examples_preprocessed.htm#ENUM_PARAMS">EXAMPLE</a>:</B>
Use:</P>
<ul>
<li> BOOST_PREPROCESSOR_ENUM_PARAMS,</li>
<li> BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT,</li>
<li> BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS,</li>
<li> BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS, or</li>
<li>BOOST_PREPROCESSOR_REPEAT, and</li>
<li> BOOST_PREPROCESSOR_COMMA_IF</li>
</ul>
<p>to avoid O(N) repetition on lists in general</p>
<blockquote>
<pre>struct make_type_list_end;
template
&lt; BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT
( MAKE_TYPE_LIST_MAX_LENGTH
, class T
, make_type_list_end
)
&gt;
struct make_type_list
{
private:
enum
{ end = is_same&lt;T0,make_type_list_end&gt;::value
};
public:
typedef typename
type_if
&lt; end
, type_cons_empty
, type_cons
&lt; T0
, typename
type_inner_if
&lt; end
, type_identity&lt;end&gt;
, make_type_list
&lt; BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS
( MAKE_TYPE_LIST_MAX_LENGTH
, T
)
&gt;
&gt;::type
&gt;
&gt;::type type;
};
</pre>
</blockquote>
<P><B>HOW:</B> BOOST_PREPROCESSOR_REPEAT uses simulated recursion (pseudo code):</P>
<blockquote>
<pre>#define BOOST_PREPROCESSOR_REPEAT(N,M,P) BOOST_PREPROCESSOR_REPEAT##N(M,P)
#define BOOST_PREPROCESSOR_REPEAT0(M,P)
#define BOOST_PREPROCESSOR_REPEAT1(M,P) M(0,P)
#define BOOST_PREPROCESSOR_REPEAT2(M,P) M(0,P) M(1,P)
#define BOOST_PREPROCESSOR_REPEAT3(M,P) BOOST_PREPROCESSOR_REPEAT2(M,P) M(2,P)
#define BOOST_PREPROCESSOR_REPEAT4(M,P) BOOST_PREPROCESSOR_REPEAT3(M,P) M(3,P)
// ...
</pre>
</blockquote>
<P>BOOST_PREPROCESSOR_ENUM_PARAMS variations use BOOST_PREPROCESSOR_REPEAT</P>
<P>BOOST_PREPROCESSOR_COMMA_IF(I) expands to a comma if I != 0.</P>
<P>BOOST_PREPROCESSOR_INC(I) expands essentially to "I+1" and BOOST_PREPROCESSOR_DEC(I)
expands essentially to "I-1".</P>
<HR>
<P><a name="Conditional Define"><B>EXAMPLE:</B></a> Use a Conditional Define to
enable user configuration of code repetition based on need rather than some
"reasonable" upper limit</P>
<blockquote>
<pre>#ifndef MAKE_TYPE_LIST_MAX_LENGTH
#define MAKE_TYPE_LIST_MAX_LENGTH 8
#endif
</pre>
</blockquote>
<P>Now the user can configure the make_type_list primitive without modifying library
code.</P>
<HR>
<P><B><a name="Token Look-Up"></a><a href="examples_preprocessed.htm#Token Look-Up">EXAMPLE</a>:</B>
Use BOOST_PREPROCESSOR_REPEAT and a Token Look-Up Function to eliminate categorical
repetition</P>
<blockquote>
<pre>// CAVEAT: My compiler is not standard on arithmetic types.
#define ARITHMETIC_TYPE(I) ARITHMETIC_TYPE##I
#define ARITHMETIC_TYPE0 bool
#define ARITHMETIC_TYPE1 char
#define ARITHMETIC_TYPE2 signed char
#define ARITHMETIC_TYPE3 unsigned char
#define ARITHMETIC_TYPE4 short
#define ARITHMETIC_TYPE5 unsigned short
#define ARITHMETIC_TYPE6 int
#define ARITHMETIC_TYPE7 unsigned int
#define ARITHMETIC_TYPE8 long
#define ARITHMETIC_TYPE9 unsigned long
#define ARITHMETIC_TYPE10 float
#define ARITHMETIC_TYPE11 double
#define ARITHMETIC_TYPE12 long double
#define ARITHMETIC_TYPE_CNT 13
// ...
#define BOOST_PREPROCESSOR_DEF(I,_)\
catch (ARITHMETIC_TYPE(I) t)\
{ report_typeid(t);\
report_value(t);\
}
BOOST_PREPROCESSOR_REPEAT
( ARITHMETIC_TYPE_CNT
, BOOST_PREPROCESSOR_DEF
, _
)
#undef BOOST_PREPROCESSOR_DEF
// ...
</pre>
</blockquote>
<P><B>NOTE:</B> The repetition of the above
example can be eliminated using template metaprogramming <A href="references.htm#[2]">[2]</A>&nbsp;as well. However
categorical repetition of operator tokens can not be completely eliminated by
using template metaprogramming.</P>
<HR>
<P><B><a name="2ND_REPEAT"></a><a href="examples_preprocessed.htm#2ND_REPEAT">EXAMPLE</a>:</B>
Use BOOST_PREPROCESSOR_REPEAT_2ND to avoid O(N*N) repetition</P>
<blockquote>
<pre>#ifndef MAX_VEC_ARG_CNT
#define MAX_VEC_ARG_CNT 8
#endif
// ...
#define ARG_FUN(I,_) BOOST_PREPROCESSOR_COMMA_IF(I) T a##I
#define ASSIGN_FUN(I,_) (*this)[I] = a##I;
#define DEF_VEC_CTOR_FUN(I,_)\
vec( BOOST_PREPROCESSOR_REPEAT(I,ARG_FUN,_) )\
{ BOOST_PREPROCESSOR_REPEAT(I,ASSIGN_FUN,_)\
}
BOOST_PREPROCESSOR_REPEAT_2ND
( BOOST_PREPROCESSOR_INC(MAX_VEC_ARG_CNT)
, DEF_VEC_CTOR_FUN
, _
)
#undef ARG_FUN
#undef ASSIGN_FUN
#undef DEF_VEC_CTOR_FUN
// ...
</pre>
</blockquote>
<P><B>HOW:</B> BOOST_PREPROCESSOR_REPEAT_2ND is implemented separately, so it
is possible to combine BOOST_PREPROCESSOR_REPEAT and BOOST_PREPROCESSOR_REPEAT_2ND.</P>
<HR>
<P><a name="IF"></a><a href="examples_preprocessed.htm#IF"><B>EXAMPLE:</B></a> Use BOOST_PREPROCESSOR_IF to implement special case for the first element</P>
<blockquote>
<pre>#define BOOST_PREPROCESSOR_COMMA_IF(C)\
BOOST_PREPROCESSOR_IF(C,BOOST_PREPROCESSOR_COMMA,BOOST_PREPROCESSOR_EMPTY)()
BOOST_PREPROCESSOR_IF(0,true,false) == false;
BOOST_PREPROCESSOR_IF(1,true,false) == true;
</pre>
</blockquote>
<P>BOOST_PREPROCESSOR_IF enables convenient generation of lists using BOOST_PREPROCESSOR_REPEAT.</P>
<P><B>NOTE:</B> THEN and ELSE don't have to be macros. However, if at least one
of them is a function-like macro and you want it to be expanded conditionally,
you have to make the other parameter a function-like macro, too. This can often
be done using BOOST_PREPROCESSOR_IDENTITY. Consider the following example (by
Aleksey Gurtovoy):</P>
<blockquote>
<pre>#define NUMBERED_EXPRESSION(I,X) \
BOOST_PREPROCESSOR_IF \
( I \
, BOOST_PREPROCESSOR_IDENTITY(X##I)\
, BOOST_PREPROCESSOR_EMPTY \
)()</pre></blockquote>
<P><b>NOTE:</b> Like in the above implementation of COMMA_IF, the result of IF
is often invoked and not the THEN and ELSE parameters. If the parameters were
invoked, the code would not expand correctly, because the EMPTY parameter would
get expanded to nothing before the IF would be properly expanded.</P>
<P><b>HOW:</b> BOOST_PREPROCESSOR_IF is defined for the entire repeat range (pseudo
code):</P>
<blockquote>
<pre>#define BOOST_PREPROCESSOR_IF(C,THEN,ELSE) BOOST_PREPROCESSOR_IF##C(THEN,ELSE)
#define BOOST_PREPROCESSOR_IF0(THEN,ELSE) ELSE
#define BOOST_PREPROCESSOR_IF1(THEN,ELSE) THEN
#define BOOST_PREPROCESSOR_IF2(THEN,ELSE) THEN
// ...
</pre>
</blockquote>
<hr>
<p><a name="Arithmetic"></a><a href="examples_preprocessed.htm#Arithmetic"><B>EXAMPLE:</B></a> Use arithmetic, logical and comparison operations when necessary</p>
<P>The PREPROCESSOR library supports saturated arithmetic, logical and
comparison operations on decimal integer literals in the range [0,BOOST_PREPROCESSOR_LIMIT_MAG].</p>
<p>Suppose that you want to generate a numbered lists with a special element inserted
at a desired position. For example: E0, E1, S, E2. Consider the following example:</p>
<blockquote>
<pre>#define SPECIAL_NUMBERED_LIST(N,I,ELEM,SPECIAL)\
BOOST_PREPROCESSOR_ASSERT_MSG(BOOST_PREPROCESSOR_LESS(I,N),BAD PARAMS FOR SPECIAL_NUMBERED_LIST!)\
BOOST_PREPROCESSOR_ENUM_PARAMS(I,ELEM)\
BOOST_PREPROCESSOR_COMMA_IF(I) SPECIAL\
BOOST_PREPROCESSOR_REPEAT(BOOST_PREPROCESSOR_SUB(\
BOOST_PREPROCESSOR_DEC(N),I),SPECIAL_NUMBERED_LIST_HELPER,(ELEM,I))
#define SPECIAL_NUMBERED_LIST_HELPER(I,ELEM_BASE)\
,\
BOOST_PREPROCESSOR_CAT\
( BOOST_PREPROCESSOR_TUPLE_ELEM(2,0,ELEM_BASE)\
, BOOST_PREPROCESSOR_ADD\
( I\
, BOOST_PREPROCESSOR_TUPLE_ELEM(2,1,ELEM_BASE)\
)\
)
SPECIAL_NUMBERED_LIST(3,0,E,S)
SPECIAL_NUMBERED_LIST(3,1,E,S)
SPECIAL_NUMBERED_LIST(3,2,E,S)
SPECIAL_NUMBERED_LIST(3,3,E,S)
</pre>
</blockquote>
<hr>
<P></P>
<p><EFBFBD> Copyright Housemarque, Inc. 2001</p>
<p>Permission to copy, use, modify, sell and distribute this document is granted
provided this copyright notice appears in all copies. This document is provided
"as is" without express or implied warranty, and with no claim as to its suitability
for any purpose. </p>
<p>Updated: <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan --><!--webbot bot="Timestamp" endspan i-checksum="15246" --></p>
</BODY></HTML>