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

96
.gitattributes vendored Normal file
View File

@ -0,0 +1,96 @@
* text=auto !eol svneol=native#text/plain
*.gitattributes text svneol=native#text/plain
# Scriptish formats
*.bat text svneol=native#text/plain
*.bsh text svneol=native#text/x-beanshell
*.cgi text svneol=native#text/plain
*.cmd text svneol=native#text/plain
*.js text svneol=native#text/javascript
*.php text svneol=native#text/x-php
*.pl text svneol=native#text/x-perl
*.pm text svneol=native#text/x-perl
*.py text svneol=native#text/x-python
*.sh eol=lf svneol=LF#text/x-sh
configure eol=lf svneol=LF#text/x-sh
# Image formats
*.bmp binary svneol=unset#image/bmp
*.gif binary svneol=unset#image/gif
*.ico binary svneol=unset#image/ico
*.jpeg binary svneol=unset#image/jpeg
*.jpg binary svneol=unset#image/jpeg
*.png binary svneol=unset#image/png
*.tif binary svneol=unset#image/tiff
*.tiff binary svneol=unset#image/tiff
*.svg text svneol=native#image/svg%2Bxml
# Data formats
*.pdf binary svneol=unset#application/pdf
*.avi binary svneol=unset#video/avi
*.doc binary svneol=unset#application/msword
*.dsp text svneol=crlf#text/plain
*.dsw text svneol=crlf#text/plain
*.eps binary svneol=unset#application/postscript
*.gz binary svneol=unset#application/gzip
*.mov binary svneol=unset#video/quicktime
*.mp3 binary svneol=unset#audio/mpeg
*.ppt binary svneol=unset#application/vnd.ms-powerpoint
*.ps binary svneol=unset#application/postscript
*.psd binary svneol=unset#application/photoshop
*.rdf binary svneol=unset#text/rdf
*.rss text svneol=unset#text/xml
*.rtf binary svneol=unset#text/rtf
*.sln text svneol=native#text/plain
*.swf binary svneol=unset#application/x-shockwave-flash
*.tgz binary svneol=unset#application/gzip
*.vcproj text svneol=native#text/xml
*.vcxproj text svneol=native#text/xml
*.vsprops text svneol=native#text/xml
*.wav binary svneol=unset#audio/wav
*.xls binary svneol=unset#application/vnd.ms-excel
*.zip binary svneol=unset#application/zip
# Text formats
.htaccess text svneol=native#text/plain
*.bbk text svneol=native#text/xml
*.cmake text svneol=native#text/plain
*.css text svneol=native#text/css
*.dtd text svneol=native#text/xml
*.htm text svneol=native#text/html
*.html text svneol=native#text/html
*.ini text svneol=native#text/plain
*.log text svneol=native#text/plain
*.mak text svneol=native#text/plain
*.qbk text svneol=native#text/plain
*.rst text svneol=native#text/plain
*.sql text svneol=native#text/x-sql
*.txt text svneol=native#text/plain
*.xhtml text svneol=native#text/xhtml%2Bxml
*.xml text svneol=native#text/xml
*.xsd text svneol=native#text/xml
*.xsl text svneol=native#text/xml
*.xslt text svneol=native#text/xml
*.xul text svneol=native#text/xul
*.yml text svneol=native#text/plain
boost-no-inspect text svneol=native#text/plain
CHANGES text svneol=native#text/plain
COPYING text svneol=native#text/plain
INSTALL text svneol=native#text/plain
Jamfile text svneol=native#text/plain
Jamroot text svneol=native#text/plain
Jamfile.v2 text svneol=native#text/plain
Jamrules text svneol=native#text/plain
Makefile* text svneol=native#text/plain
README text svneol=native#text/plain
TODO text svneol=native#text/plain
# Code formats
*.c text svneol=native#text/plain
*.cpp text svneol=native#text/plain
*.h text svneol=native#text/plain
*.hpp text svneol=native#text/plain
*.ipp text svneol=native#text/plain
*.tpp text svneol=native#text/plain
*.jam text svneol=native#text/plain
*.java text svneol=native#text/plain

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>

View File

@ -0,0 +1,32 @@
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_HPP
#define BOOST_PREPROCESSOR_ARITHMETIC_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/arithmetic.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP
# include <boost/preprocessor/arithmetic/add.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_DIV_HPP
# include <boost/preprocessor/arithmetic/div.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_MUL_HPP
# include <boost/preprocessor/arithmetic/mul.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP
# include <boost/preprocessor/arithmetic/sub.hpp>
#endif
#endif

View File

@ -0,0 +1,159 @@
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP
#define BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/arithmetic/add.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_INC_HPP
# include <boost/preprocessor/inc.hpp>
#endif
//! Expands to the sum of X and Y.
#define BOOST_PREPROCESSOR_ADD(X,Y) BOOST_PREPROCESSOR_ADD_DELAY(X,Y)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_ADD_DELAY(X,Y) BOOST_PREPROCESSOR_ADD##X(Y)
#define BOOST_PREPROCESSOR_ADD0(Y) Y
#define BOOST_PREPROCESSOR_ADD1(Y) BOOST_PREPROCESSOR_INC(Y)
#define BOOST_PREPROCESSOR_ADD2(Y) BOOST_PREPROCESSOR_INC(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD3(Y) BOOST_PREPROCESSOR_ADD2(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD4(Y) BOOST_PREPROCESSOR_ADD3(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD5(Y) BOOST_PREPROCESSOR_ADD4(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD6(Y) BOOST_PREPROCESSOR_ADD5(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD7(Y) BOOST_PREPROCESSOR_ADD6(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD8(Y) BOOST_PREPROCESSOR_ADD7(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD9(Y) BOOST_PREPROCESSOR_ADD8(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD10(Y) BOOST_PREPROCESSOR_ADD9(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD11(Y) BOOST_PREPROCESSOR_ADD10(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD12(Y) BOOST_PREPROCESSOR_ADD11(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD13(Y) BOOST_PREPROCESSOR_ADD12(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD14(Y) BOOST_PREPROCESSOR_ADD13(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD15(Y) BOOST_PREPROCESSOR_ADD14(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD16(Y) BOOST_PREPROCESSOR_ADD15(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD17(Y) BOOST_PREPROCESSOR_ADD16(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD18(Y) BOOST_PREPROCESSOR_ADD17(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD19(Y) BOOST_PREPROCESSOR_ADD18(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD20(Y) BOOST_PREPROCESSOR_ADD19(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD21(Y) BOOST_PREPROCESSOR_ADD20(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD22(Y) BOOST_PREPROCESSOR_ADD21(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD23(Y) BOOST_PREPROCESSOR_ADD22(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD24(Y) BOOST_PREPROCESSOR_ADD23(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD25(Y) BOOST_PREPROCESSOR_ADD24(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD26(Y) BOOST_PREPROCESSOR_ADD25(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD27(Y) BOOST_PREPROCESSOR_ADD26(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD28(Y) BOOST_PREPROCESSOR_ADD27(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD29(Y) BOOST_PREPROCESSOR_ADD28(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD30(Y) BOOST_PREPROCESSOR_ADD29(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD31(Y) BOOST_PREPROCESSOR_ADD30(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD32(Y) BOOST_PREPROCESSOR_ADD31(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD33(Y) BOOST_PREPROCESSOR_ADD32(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD34(Y) BOOST_PREPROCESSOR_ADD33(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD35(Y) BOOST_PREPROCESSOR_ADD34(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD36(Y) BOOST_PREPROCESSOR_ADD35(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD37(Y) BOOST_PREPROCESSOR_ADD36(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD38(Y) BOOST_PREPROCESSOR_ADD37(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD39(Y) BOOST_PREPROCESSOR_ADD38(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD40(Y) BOOST_PREPROCESSOR_ADD39(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD41(Y) BOOST_PREPROCESSOR_ADD40(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD42(Y) BOOST_PREPROCESSOR_ADD41(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD43(Y) BOOST_PREPROCESSOR_ADD42(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD44(Y) BOOST_PREPROCESSOR_ADD43(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD45(Y) BOOST_PREPROCESSOR_ADD44(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD46(Y) BOOST_PREPROCESSOR_ADD45(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD47(Y) BOOST_PREPROCESSOR_ADD46(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD48(Y) BOOST_PREPROCESSOR_ADD47(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD49(Y) BOOST_PREPROCESSOR_ADD48(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD50(Y) BOOST_PREPROCESSOR_ADD49(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD51(Y) BOOST_PREPROCESSOR_ADD50(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD52(Y) BOOST_PREPROCESSOR_ADD51(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD53(Y) BOOST_PREPROCESSOR_ADD52(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD54(Y) BOOST_PREPROCESSOR_ADD53(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD55(Y) BOOST_PREPROCESSOR_ADD54(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD56(Y) BOOST_PREPROCESSOR_ADD55(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD57(Y) BOOST_PREPROCESSOR_ADD56(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD58(Y) BOOST_PREPROCESSOR_ADD57(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD59(Y) BOOST_PREPROCESSOR_ADD58(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD60(Y) BOOST_PREPROCESSOR_ADD59(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD61(Y) BOOST_PREPROCESSOR_ADD60(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD62(Y) BOOST_PREPROCESSOR_ADD61(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD63(Y) BOOST_PREPROCESSOR_ADD62(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD64(Y) BOOST_PREPROCESSOR_ADD63(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD65(Y) BOOST_PREPROCESSOR_ADD64(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD66(Y) BOOST_PREPROCESSOR_ADD65(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD67(Y) BOOST_PREPROCESSOR_ADD66(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD68(Y) BOOST_PREPROCESSOR_ADD67(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD69(Y) BOOST_PREPROCESSOR_ADD68(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD70(Y) BOOST_PREPROCESSOR_ADD69(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD71(Y) BOOST_PREPROCESSOR_ADD70(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD72(Y) BOOST_PREPROCESSOR_ADD71(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD73(Y) BOOST_PREPROCESSOR_ADD72(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD74(Y) BOOST_PREPROCESSOR_ADD73(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD75(Y) BOOST_PREPROCESSOR_ADD74(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD76(Y) BOOST_PREPROCESSOR_ADD75(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD77(Y) BOOST_PREPROCESSOR_ADD76(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD78(Y) BOOST_PREPROCESSOR_ADD77(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD79(Y) BOOST_PREPROCESSOR_ADD78(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD80(Y) BOOST_PREPROCESSOR_ADD79(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD81(Y) BOOST_PREPROCESSOR_ADD80(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD82(Y) BOOST_PREPROCESSOR_ADD81(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD83(Y) BOOST_PREPROCESSOR_ADD82(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD84(Y) BOOST_PREPROCESSOR_ADD83(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD85(Y) BOOST_PREPROCESSOR_ADD84(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD86(Y) BOOST_PREPROCESSOR_ADD85(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD87(Y) BOOST_PREPROCESSOR_ADD86(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD88(Y) BOOST_PREPROCESSOR_ADD87(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD89(Y) BOOST_PREPROCESSOR_ADD88(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD90(Y) BOOST_PREPROCESSOR_ADD89(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD91(Y) BOOST_PREPROCESSOR_ADD90(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD92(Y) BOOST_PREPROCESSOR_ADD91(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD93(Y) BOOST_PREPROCESSOR_ADD92(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD94(Y) BOOST_PREPROCESSOR_ADD93(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD95(Y) BOOST_PREPROCESSOR_ADD94(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD96(Y) BOOST_PREPROCESSOR_ADD95(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD97(Y) BOOST_PREPROCESSOR_ADD96(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD98(Y) BOOST_PREPROCESSOR_ADD97(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD99(Y) BOOST_PREPROCESSOR_ADD98(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD100(Y) BOOST_PREPROCESSOR_ADD99(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD101(Y) BOOST_PREPROCESSOR_ADD100(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD102(Y) BOOST_PREPROCESSOR_ADD101(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD103(Y) BOOST_PREPROCESSOR_ADD102(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD104(Y) BOOST_PREPROCESSOR_ADD103(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD105(Y) BOOST_PREPROCESSOR_ADD104(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD106(Y) BOOST_PREPROCESSOR_ADD105(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD107(Y) BOOST_PREPROCESSOR_ADD106(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD108(Y) BOOST_PREPROCESSOR_ADD107(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD109(Y) BOOST_PREPROCESSOR_ADD108(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD110(Y) BOOST_PREPROCESSOR_ADD109(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD111(Y) BOOST_PREPROCESSOR_ADD110(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD112(Y) BOOST_PREPROCESSOR_ADD111(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD113(Y) BOOST_PREPROCESSOR_ADD112(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD114(Y) BOOST_PREPROCESSOR_ADD113(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD115(Y) BOOST_PREPROCESSOR_ADD114(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD116(Y) BOOST_PREPROCESSOR_ADD115(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD117(Y) BOOST_PREPROCESSOR_ADD116(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD118(Y) BOOST_PREPROCESSOR_ADD117(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD119(Y) BOOST_PREPROCESSOR_ADD118(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD120(Y) BOOST_PREPROCESSOR_ADD119(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD121(Y) BOOST_PREPROCESSOR_ADD120(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD122(Y) BOOST_PREPROCESSOR_ADD121(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD123(Y) BOOST_PREPROCESSOR_ADD122(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD124(Y) BOOST_PREPROCESSOR_ADD123(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD125(Y) BOOST_PREPROCESSOR_ADD124(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD126(Y) BOOST_PREPROCESSOR_ADD125(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD127(Y) BOOST_PREPROCESSOR_ADD126(BOOST_PREPROCESSOR_INC(Y))
#define BOOST_PREPROCESSOR_ADD128(Y) BOOST_PREPROCESSOR_ADD127(BOOST_PREPROCESSOR_INC(Y))
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,49 @@
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_DIV_HPP
#define BOOST_PREPROCESSOR_ARITHMETIC_DIV_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/arithmetic/div.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP
# include <boost/preprocessor/arithmetic/sub.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_EQUAL_HPP
# include <boost/preprocessor/comparison/less_equal.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_INC_HPP
# include <boost/preprocessor/inc.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_TUPLE_HPP
# include <boost/preprocessor/tuple.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_WHILE_HPP
# include <boost/preprocessor/while.hpp>
#endif
//! Expands to the quotient of X and Y.
#define BOOST_PREPROCESSOR_DIV(X,Y)\
BOOST_PREPROCESSOR_TUPLE_ELEM(3,0,BOOST_PREPROCESSOR_WHILE(BOOST_PREPROCESSOR_DIV_C,BOOST_PREPROCESSOR_DIV_F,(0,X,Y)))
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_DIV_F(P)\
( BOOST_PREPROCESSOR_INC(BOOST_PREPROCESSOR_TUPLE_ELEM(3,0,P))\
, BOOST_PREPROCESSOR_SUB(BOOST_PREPROCESSOR_TUPLE_ELEM(3,1,P),BOOST_PREPROCESSOR_TUPLE_ELEM(3,2,P))\
, BOOST_PREPROCESSOR_TUPLE_ELEM(3,2,P)\
)
#define BOOST_PREPROCESSOR_DIV_C(P)\
BOOST_PREPROCESSOR_LESS_EQUAL(BOOST_PREPROCESSOR_TUPLE_ELEM(3,2,P),BOOST_PREPROCESSOR_TUPLE_ELEM(3,1,P))
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,159 @@
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_MUL_HPP
#define BOOST_PREPROCESSOR_ARITHMETIC_MUL_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/arithmetic/mul.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP
# include <boost/preprocessor/arithmetic/add.hpp>
#endif
//! Expands to the product of X and Y.
#define BOOST_PREPROCESSOR_MUL(X,Y) BOOST_PREPROCESSOR_MUL_DELAY(X,Y)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_MUL_DELAY(X,Y) BOOST_PREPROCESSOR_MUL##X(Y,0)
#define BOOST_PREPROCESSOR_MUL0(Y,A) A
#define BOOST_PREPROCESSOR_MUL1(Y,A) BOOST_PREPROCESSOR_ADD(Y,A)
#define BOOST_PREPROCESSOR_MUL2(Y,A) BOOST_PREPROCESSOR_MUL1(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL3(Y,A) BOOST_PREPROCESSOR_MUL2(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL4(Y,A) BOOST_PREPROCESSOR_MUL3(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL5(Y,A) BOOST_PREPROCESSOR_MUL4(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL6(Y,A) BOOST_PREPROCESSOR_MUL5(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL7(Y,A) BOOST_PREPROCESSOR_MUL6(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL8(Y,A) BOOST_PREPROCESSOR_MUL7(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL9(Y,A) BOOST_PREPROCESSOR_MUL8(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL10(Y,A) BOOST_PREPROCESSOR_MUL9(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL11(Y,A) BOOST_PREPROCESSOR_MUL10(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL12(Y,A) BOOST_PREPROCESSOR_MUL11(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL13(Y,A) BOOST_PREPROCESSOR_MUL12(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL14(Y,A) BOOST_PREPROCESSOR_MUL13(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL15(Y,A) BOOST_PREPROCESSOR_MUL14(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL16(Y,A) BOOST_PREPROCESSOR_MUL15(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL17(Y,A) BOOST_PREPROCESSOR_MUL16(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL18(Y,A) BOOST_PREPROCESSOR_MUL17(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL19(Y,A) BOOST_PREPROCESSOR_MUL18(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL20(Y,A) BOOST_PREPROCESSOR_MUL19(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL21(Y,A) BOOST_PREPROCESSOR_MUL20(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL22(Y,A) BOOST_PREPROCESSOR_MUL21(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL23(Y,A) BOOST_PREPROCESSOR_MUL22(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL24(Y,A) BOOST_PREPROCESSOR_MUL23(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL25(Y,A) BOOST_PREPROCESSOR_MUL24(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL26(Y,A) BOOST_PREPROCESSOR_MUL25(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL27(Y,A) BOOST_PREPROCESSOR_MUL26(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL28(Y,A) BOOST_PREPROCESSOR_MUL27(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL29(Y,A) BOOST_PREPROCESSOR_MUL28(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL30(Y,A) BOOST_PREPROCESSOR_MUL29(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL31(Y,A) BOOST_PREPROCESSOR_MUL30(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL32(Y,A) BOOST_PREPROCESSOR_MUL31(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL33(Y,A) BOOST_PREPROCESSOR_MUL32(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL34(Y,A) BOOST_PREPROCESSOR_MUL33(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL35(Y,A) BOOST_PREPROCESSOR_MUL34(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL36(Y,A) BOOST_PREPROCESSOR_MUL35(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL37(Y,A) BOOST_PREPROCESSOR_MUL36(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL38(Y,A) BOOST_PREPROCESSOR_MUL37(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL39(Y,A) BOOST_PREPROCESSOR_MUL38(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL40(Y,A) BOOST_PREPROCESSOR_MUL39(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL41(Y,A) BOOST_PREPROCESSOR_MUL40(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL42(Y,A) BOOST_PREPROCESSOR_MUL41(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL43(Y,A) BOOST_PREPROCESSOR_MUL42(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL44(Y,A) BOOST_PREPROCESSOR_MUL43(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL45(Y,A) BOOST_PREPROCESSOR_MUL44(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL46(Y,A) BOOST_PREPROCESSOR_MUL45(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL47(Y,A) BOOST_PREPROCESSOR_MUL46(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL48(Y,A) BOOST_PREPROCESSOR_MUL47(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL49(Y,A) BOOST_PREPROCESSOR_MUL48(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL50(Y,A) BOOST_PREPROCESSOR_MUL49(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL51(Y,A) BOOST_PREPROCESSOR_MUL50(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL52(Y,A) BOOST_PREPROCESSOR_MUL51(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL53(Y,A) BOOST_PREPROCESSOR_MUL52(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL54(Y,A) BOOST_PREPROCESSOR_MUL53(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL55(Y,A) BOOST_PREPROCESSOR_MUL54(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL56(Y,A) BOOST_PREPROCESSOR_MUL55(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL57(Y,A) BOOST_PREPROCESSOR_MUL56(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL58(Y,A) BOOST_PREPROCESSOR_MUL57(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL59(Y,A) BOOST_PREPROCESSOR_MUL58(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL60(Y,A) BOOST_PREPROCESSOR_MUL59(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL61(Y,A) BOOST_PREPROCESSOR_MUL60(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL62(Y,A) BOOST_PREPROCESSOR_MUL61(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL63(Y,A) BOOST_PREPROCESSOR_MUL62(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL64(Y,A) BOOST_PREPROCESSOR_MUL63(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL65(Y,A) BOOST_PREPROCESSOR_MUL64(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL66(Y,A) BOOST_PREPROCESSOR_MUL65(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL67(Y,A) BOOST_PREPROCESSOR_MUL66(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL68(Y,A) BOOST_PREPROCESSOR_MUL67(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL69(Y,A) BOOST_PREPROCESSOR_MUL68(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL70(Y,A) BOOST_PREPROCESSOR_MUL69(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL71(Y,A) BOOST_PREPROCESSOR_MUL70(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL72(Y,A) BOOST_PREPROCESSOR_MUL71(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL73(Y,A) BOOST_PREPROCESSOR_MUL72(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL74(Y,A) BOOST_PREPROCESSOR_MUL73(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL75(Y,A) BOOST_PREPROCESSOR_MUL74(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL76(Y,A) BOOST_PREPROCESSOR_MUL75(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL77(Y,A) BOOST_PREPROCESSOR_MUL76(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL78(Y,A) BOOST_PREPROCESSOR_MUL77(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL79(Y,A) BOOST_PREPROCESSOR_MUL78(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL80(Y,A) BOOST_PREPROCESSOR_MUL79(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL81(Y,A) BOOST_PREPROCESSOR_MUL80(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL82(Y,A) BOOST_PREPROCESSOR_MUL81(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL83(Y,A) BOOST_PREPROCESSOR_MUL82(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL84(Y,A) BOOST_PREPROCESSOR_MUL83(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL85(Y,A) BOOST_PREPROCESSOR_MUL84(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL86(Y,A) BOOST_PREPROCESSOR_MUL85(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL87(Y,A) BOOST_PREPROCESSOR_MUL86(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL88(Y,A) BOOST_PREPROCESSOR_MUL87(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL89(Y,A) BOOST_PREPROCESSOR_MUL88(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL90(Y,A) BOOST_PREPROCESSOR_MUL89(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL91(Y,A) BOOST_PREPROCESSOR_MUL90(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL92(Y,A) BOOST_PREPROCESSOR_MUL91(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL93(Y,A) BOOST_PREPROCESSOR_MUL92(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL94(Y,A) BOOST_PREPROCESSOR_MUL93(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL95(Y,A) BOOST_PREPROCESSOR_MUL94(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL96(Y,A) BOOST_PREPROCESSOR_MUL95(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL97(Y,A) BOOST_PREPROCESSOR_MUL96(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL98(Y,A) BOOST_PREPROCESSOR_MUL97(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL99(Y,A) BOOST_PREPROCESSOR_MUL98(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL100(Y,A) BOOST_PREPROCESSOR_MUL99(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL101(Y,A) BOOST_PREPROCESSOR_MUL100(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL102(Y,A) BOOST_PREPROCESSOR_MUL101(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL103(Y,A) BOOST_PREPROCESSOR_MUL102(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL104(Y,A) BOOST_PREPROCESSOR_MUL103(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL105(Y,A) BOOST_PREPROCESSOR_MUL104(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL106(Y,A) BOOST_PREPROCESSOR_MUL105(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL107(Y,A) BOOST_PREPROCESSOR_MUL106(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL108(Y,A) BOOST_PREPROCESSOR_MUL107(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL109(Y,A) BOOST_PREPROCESSOR_MUL108(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL110(Y,A) BOOST_PREPROCESSOR_MUL109(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL111(Y,A) BOOST_PREPROCESSOR_MUL110(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL112(Y,A) BOOST_PREPROCESSOR_MUL111(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL113(Y,A) BOOST_PREPROCESSOR_MUL112(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL114(Y,A) BOOST_PREPROCESSOR_MUL113(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL115(Y,A) BOOST_PREPROCESSOR_MUL114(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL116(Y,A) BOOST_PREPROCESSOR_MUL115(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL117(Y,A) BOOST_PREPROCESSOR_MUL116(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL118(Y,A) BOOST_PREPROCESSOR_MUL117(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL119(Y,A) BOOST_PREPROCESSOR_MUL118(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL120(Y,A) BOOST_PREPROCESSOR_MUL119(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL121(Y,A) BOOST_PREPROCESSOR_MUL120(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL122(Y,A) BOOST_PREPROCESSOR_MUL121(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL123(Y,A) BOOST_PREPROCESSOR_MUL122(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL124(Y,A) BOOST_PREPROCESSOR_MUL123(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL125(Y,A) BOOST_PREPROCESSOR_MUL124(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL126(Y,A) BOOST_PREPROCESSOR_MUL125(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL127(Y,A) BOOST_PREPROCESSOR_MUL126(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#define BOOST_PREPROCESSOR_MUL128(Y,A) BOOST_PREPROCESSOR_MUL127(Y,BOOST_PREPROCESSOR_ADD(Y,A))
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,159 @@
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP
#define BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/arithmetic/sub.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_DEC_HPP
# include <boost/preprocessor/dec.hpp>
#endif
//! Expands to the difference of X and Y.
#define BOOST_PREPROCESSOR_SUB(X,Y) BOOST_PREPROCESSOR_SUB_DELAY(X,Y)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_SUB_DELAY(X,Y) BOOST_PREPROCESSOR_SUB##Y(X)
#define BOOST_PREPROCESSOR_SUB0(Y) Y
#define BOOST_PREPROCESSOR_SUB1(Y) BOOST_PREPROCESSOR_DEC(Y)
#define BOOST_PREPROCESSOR_SUB2(Y) BOOST_PREPROCESSOR_DEC(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB3(Y) BOOST_PREPROCESSOR_SUB2(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB4(Y) BOOST_PREPROCESSOR_SUB3(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB5(Y) BOOST_PREPROCESSOR_SUB4(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB6(Y) BOOST_PREPROCESSOR_SUB5(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB7(Y) BOOST_PREPROCESSOR_SUB6(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB8(Y) BOOST_PREPROCESSOR_SUB7(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB9(Y) BOOST_PREPROCESSOR_SUB8(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB10(Y) BOOST_PREPROCESSOR_SUB9(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB11(Y) BOOST_PREPROCESSOR_SUB10(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB12(Y) BOOST_PREPROCESSOR_SUB11(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB13(Y) BOOST_PREPROCESSOR_SUB12(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB14(Y) BOOST_PREPROCESSOR_SUB13(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB15(Y) BOOST_PREPROCESSOR_SUB14(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB16(Y) BOOST_PREPROCESSOR_SUB15(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB17(Y) BOOST_PREPROCESSOR_SUB16(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB18(Y) BOOST_PREPROCESSOR_SUB17(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB19(Y) BOOST_PREPROCESSOR_SUB18(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB20(Y) BOOST_PREPROCESSOR_SUB19(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB21(Y) BOOST_PREPROCESSOR_SUB20(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB22(Y) BOOST_PREPROCESSOR_SUB21(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB23(Y) BOOST_PREPROCESSOR_SUB22(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB24(Y) BOOST_PREPROCESSOR_SUB23(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB25(Y) BOOST_PREPROCESSOR_SUB24(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB26(Y) BOOST_PREPROCESSOR_SUB25(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB27(Y) BOOST_PREPROCESSOR_SUB26(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB28(Y) BOOST_PREPROCESSOR_SUB27(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB29(Y) BOOST_PREPROCESSOR_SUB28(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB30(Y) BOOST_PREPROCESSOR_SUB29(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB31(Y) BOOST_PREPROCESSOR_SUB30(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB32(Y) BOOST_PREPROCESSOR_SUB31(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB33(Y) BOOST_PREPROCESSOR_SUB32(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB34(Y) BOOST_PREPROCESSOR_SUB33(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB35(Y) BOOST_PREPROCESSOR_SUB34(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB36(Y) BOOST_PREPROCESSOR_SUB35(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB37(Y) BOOST_PREPROCESSOR_SUB36(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB38(Y) BOOST_PREPROCESSOR_SUB37(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB39(Y) BOOST_PREPROCESSOR_SUB38(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB40(Y) BOOST_PREPROCESSOR_SUB39(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB41(Y) BOOST_PREPROCESSOR_SUB40(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB42(Y) BOOST_PREPROCESSOR_SUB41(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB43(Y) BOOST_PREPROCESSOR_SUB42(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB44(Y) BOOST_PREPROCESSOR_SUB43(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB45(Y) BOOST_PREPROCESSOR_SUB44(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB46(Y) BOOST_PREPROCESSOR_SUB45(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB47(Y) BOOST_PREPROCESSOR_SUB46(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB48(Y) BOOST_PREPROCESSOR_SUB47(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB49(Y) BOOST_PREPROCESSOR_SUB48(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB50(Y) BOOST_PREPROCESSOR_SUB49(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB51(Y) BOOST_PREPROCESSOR_SUB50(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB52(Y) BOOST_PREPROCESSOR_SUB51(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB53(Y) BOOST_PREPROCESSOR_SUB52(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB54(Y) BOOST_PREPROCESSOR_SUB53(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB55(Y) BOOST_PREPROCESSOR_SUB54(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB56(Y) BOOST_PREPROCESSOR_SUB55(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB57(Y) BOOST_PREPROCESSOR_SUB56(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB58(Y) BOOST_PREPROCESSOR_SUB57(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB59(Y) BOOST_PREPROCESSOR_SUB58(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB60(Y) BOOST_PREPROCESSOR_SUB59(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB61(Y) BOOST_PREPROCESSOR_SUB60(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB62(Y) BOOST_PREPROCESSOR_SUB61(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB63(Y) BOOST_PREPROCESSOR_SUB62(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB64(Y) BOOST_PREPROCESSOR_SUB63(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB65(Y) BOOST_PREPROCESSOR_SUB64(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB66(Y) BOOST_PREPROCESSOR_SUB65(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB67(Y) BOOST_PREPROCESSOR_SUB66(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB68(Y) BOOST_PREPROCESSOR_SUB67(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB69(Y) BOOST_PREPROCESSOR_SUB68(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB70(Y) BOOST_PREPROCESSOR_SUB69(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB71(Y) BOOST_PREPROCESSOR_SUB70(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB72(Y) BOOST_PREPROCESSOR_SUB71(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB73(Y) BOOST_PREPROCESSOR_SUB72(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB74(Y) BOOST_PREPROCESSOR_SUB73(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB75(Y) BOOST_PREPROCESSOR_SUB74(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB76(Y) BOOST_PREPROCESSOR_SUB75(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB77(Y) BOOST_PREPROCESSOR_SUB76(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB78(Y) BOOST_PREPROCESSOR_SUB77(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB79(Y) BOOST_PREPROCESSOR_SUB78(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB80(Y) BOOST_PREPROCESSOR_SUB79(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB81(Y) BOOST_PREPROCESSOR_SUB80(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB82(Y) BOOST_PREPROCESSOR_SUB81(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB83(Y) BOOST_PREPROCESSOR_SUB82(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB84(Y) BOOST_PREPROCESSOR_SUB83(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB85(Y) BOOST_PREPROCESSOR_SUB84(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB86(Y) BOOST_PREPROCESSOR_SUB85(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB87(Y) BOOST_PREPROCESSOR_SUB86(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB88(Y) BOOST_PREPROCESSOR_SUB87(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB89(Y) BOOST_PREPROCESSOR_SUB88(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB90(Y) BOOST_PREPROCESSOR_SUB89(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB91(Y) BOOST_PREPROCESSOR_SUB90(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB92(Y) BOOST_PREPROCESSOR_SUB91(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB93(Y) BOOST_PREPROCESSOR_SUB92(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB94(Y) BOOST_PREPROCESSOR_SUB93(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB95(Y) BOOST_PREPROCESSOR_SUB94(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB96(Y) BOOST_PREPROCESSOR_SUB95(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB97(Y) BOOST_PREPROCESSOR_SUB96(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB98(Y) BOOST_PREPROCESSOR_SUB97(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB99(Y) BOOST_PREPROCESSOR_SUB98(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB100(Y) BOOST_PREPROCESSOR_SUB99(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB101(Y) BOOST_PREPROCESSOR_SUB100(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB102(Y) BOOST_PREPROCESSOR_SUB101(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB103(Y) BOOST_PREPROCESSOR_SUB102(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB104(Y) BOOST_PREPROCESSOR_SUB103(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB105(Y) BOOST_PREPROCESSOR_SUB104(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB106(Y) BOOST_PREPROCESSOR_SUB105(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB107(Y) BOOST_PREPROCESSOR_SUB106(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB108(Y) BOOST_PREPROCESSOR_SUB107(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB109(Y) BOOST_PREPROCESSOR_SUB108(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB110(Y) BOOST_PREPROCESSOR_SUB109(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB111(Y) BOOST_PREPROCESSOR_SUB110(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB112(Y) BOOST_PREPROCESSOR_SUB111(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB113(Y) BOOST_PREPROCESSOR_SUB112(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB114(Y) BOOST_PREPROCESSOR_SUB113(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB115(Y) BOOST_PREPROCESSOR_SUB114(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB116(Y) BOOST_PREPROCESSOR_SUB115(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB117(Y) BOOST_PREPROCESSOR_SUB116(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB118(Y) BOOST_PREPROCESSOR_SUB117(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB119(Y) BOOST_PREPROCESSOR_SUB118(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB120(Y) BOOST_PREPROCESSOR_SUB119(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB121(Y) BOOST_PREPROCESSOR_SUB120(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB122(Y) BOOST_PREPROCESSOR_SUB121(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB123(Y) BOOST_PREPROCESSOR_SUB122(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB124(Y) BOOST_PREPROCESSOR_SUB123(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB125(Y) BOOST_PREPROCESSOR_SUB124(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB126(Y) BOOST_PREPROCESSOR_SUB125(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB127(Y) BOOST_PREPROCESSOR_SUB126(BOOST_PREPROCESSOR_DEC(Y))
#define BOOST_PREPROCESSOR_SUB128(Y) BOOST_PREPROCESSOR_SUB127(BOOST_PREPROCESSOR_DEC(Y))
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,32 @@
#ifndef BOOST_PREPROCESSOR_ASSERT_MSG_HPP
#define BOOST_PREPROCESSOR_ASSERT_MSG_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/assert_msg.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_EMPTY_HPP
# include <boost/preprocessor/empty.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_IDENTITY_HPP
# include <boost/preprocessor/identity.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_IF_HPP
# include <boost/preprocessor/if.hpp>
#endif
//! Expands to nothing if C != 0 and to MSG if C == 0.
#define BOOST_PREPROCESSOR_ASSERT_MSG(C,MSG) BOOST_PREPROCESSOR_IF(C,BOOST_PREPROCESSOR_EMPTY,BOOST_PREPROCESSOR_IDENTITY(MSG))()
#endif

View File

@ -0,0 +1,70 @@
#ifndef BOOST_PREPROCESSOR_CAT_HPP
#define BOOST_PREPROCESSOR_CAT_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/cat.hpp">Click here to see the header.</a>
*/
//! Delays the catenation of L and R.
/*!
Example:
<PRE>\verbatim
#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) <= sizeof(long));
\endverbatim</PRE>
The above expands to:
<PRE>\verbatim
enum
{ static_check_152 = (sizeof(int) <= sizeof(long)) ? 1 : -1
};
typedef char
static_assert_152
[ static_check_152
];
\endverbatim</PRE>
Using BOOST_PREPROCESSOR_CAT() 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:
<PRE>\verbatim
enum
{ static_check___LINE__ = (sizeof(int) <= sizeof(long)) ? 1 : -1
};
typedef char
static_assert___LINE__
[ static_check___LINE__
];
\endverbatim</PRE>
*/
#define BOOST_PREPROCESSOR_CAT(L,R) BOOST_PREPROCESSOR_CAT_DELAY(L,R)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_CAT_DELAY(L,R) L##R
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,25 @@
#ifndef BOOST_PREPROCESSOR_COMMA_HPP
#define BOOST_PREPROCESSOR_COMMA_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/comma.hpp">Click here to see the header.</a>
*/
//! Expands to a comma. Can be used with BOOST_PREPROCESSOR_IF().
/*!
See BOOST_PREPROCESSOR_COMMA_IF().
*/
#define BOOST_PREPROCESSOR_COMMA() ,
#endif

View File

@ -0,0 +1,32 @@
#ifndef BOOST_PREPROCESSOR_COMMA_IF_HPP
#define BOOST_PREPROCESSOR_COMMA_IF_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/comma_if.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_COMMA_HPP
# include <boost/preprocessor/comma.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_EMPTY_HPP
# include <boost/preprocessor/empty.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_IF_HPP
# include <boost/preprocessor/if.hpp>
#endif
//! Expands to a comma if C != 0 and nothing if C == 0.
#define BOOST_PREPROCESSOR_COMMA_IF(C) BOOST_PREPROCESSOR_IF(C,BOOST_PREPROCESSOR_COMMA,BOOST_PREPROCESSOR_EMPTY)()
#endif

View File

@ -0,0 +1,38 @@
#ifndef BOOST_PREPROCESSOR_COMPARISON_HPP
#define BOOST_PREPROCESSOR_COMPARISON_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/comparison.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_COMPARISON_EQUAL_HPP
# include <boost/preprocessor/comparison/equal.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_COMPARISON_GREATER_HPP
# include <boost/preprocessor/comparison/greater.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_COMPARISON_GREATER_EQUAL_HPP
# include <boost/preprocessor/comparison/greater_equal.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_HPP
# include <boost/preprocessor/comparison/less.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_EQUAL_HPP
# include <boost/preprocessor/comparison/less_equal.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_COMPARISON_NOT_EQUAL_HPP
# include <boost/preprocessor/comparison/not_equal.hpp>
#endif
#endif

View File

@ -0,0 +1,32 @@
#ifndef BOOST_PREPROCESSOR_COMPARISON_EQUAL_HPP
#define BOOST_PREPROCESSOR_COMPARISON_EQUAL_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/comparison/equal.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP
# include <boost/preprocessor/arithmetic/add.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP
# include <boost/preprocessor/arithmetic/sub.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_LOGICAL_NOT_HPP
# include <boost/preprocessor/logical/not.hpp>
#endif
//! Expands to 1 if X==Y and 0 otherwise.
#define BOOST_PREPROCESSOR_EQUAL(X,Y) BOOST_PREPROCESSOR_NOT(BOOST_PREPROCESSOR_ADD(BOOST_PREPROCESSOR_SUB(X,Y),BOOST_PREPROCESSOR_SUB(Y,X)))
#endif

View File

@ -0,0 +1,26 @@
#ifndef BOOST_PREPROCESSOR_COMPARISON_GREATER_HPP
#define BOOST_PREPROCESSOR_COMPARISON_GREATER_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/comparison/greater.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_HPP
# include <boost/preprocessor/comparison/less.hpp>
#endif
//! Expands to 1 if X>Y and 0 otherwise.
#define BOOST_PREPROCESSOR_GREATER(X,Y) BOOST_PREPROCESSOR_LESS(Y,X)
#endif

View File

@ -0,0 +1,26 @@
#ifndef BOOST_PREPROCESSOR_COMPARISON_GREATER_EQUAL_HPP
#define BOOST_PREPROCESSOR_COMPARISON_GREATER_EQUAL_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/comparison/greater_equal.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_EQUAL_HPP
# include <boost/preprocessor/comparison/less_equal.hpp>
#endif
//! Expands to 1 if X>=Y and 0 otherwise.
#define BOOST_PREPROCESSOR_GREATER_EQUAL(X,Y) BOOST_PREPROCESSOR_LESS_EQUAL(Y,X)
#endif

View File

@ -0,0 +1,32 @@
#ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_HPP
#define BOOST_PREPROCESSOR_COMPARISON_LESS_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/comparison/less.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_COMPARISON_EQUAL_HPP
# include <boost/preprocessor/comparison/equal.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_EQUAL_HPP
# include <boost/preprocessor/comparison/less_equal.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_IF_HPP
# include <boost/preprocessor/if.hpp>
#endif
//! Expands to 1 if X<Y and 0 otherwise.
#define BOOST_PREPROCESSOR_LESS(X,Y) BOOST_PREPROCESSOR_IF(BOOST_PREPROCESSOR_EQUAL(X,Y),0,BOOST_PREPROCESSOR_LESS_EQUAL(X,Y))
#endif

View File

@ -0,0 +1,29 @@
#ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_EQUAL_HPP
#define BOOST_PREPROCESSOR_COMPARISON_LESS_EQUAL_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/comparison/less_equal.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP
# include <boost/preprocessor/arithmetic/sub.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_LOGICAL_NOT_HPP
# include <boost/preprocessor/logical/not.hpp>
#endif
//! Expands to 1 if X<=Y and 0 otherwise.
#define BOOST_PREPROCESSOR_LESS_EQUAL(X,Y) BOOST_PREPROCESSOR_NOT(BOOST_PREPROCESSOR_SUB(X,Y))
#endif

View File

@ -0,0 +1,32 @@
#ifndef BOOST_PREPROCESSOR_COMPARISON_NOT_EQUAL_HPP
#define BOOST_PREPROCESSOR_COMPARISON_NOT_EQUAL_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/comparison/not_equal.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_ADD_HPP
# include <boost/preprocessor/arithmetic/add.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_ARITHMETIC_SUB_HPP
# include <boost/preprocessor/arithmetic/sub.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP
# include <boost/preprocessor/logical/bool.hpp>
#endif
//! Expands to 1 if X!=Y and 0 otherwise.
#define BOOST_PREPROCESSOR_NOT_EQUAL(X,Y) BOOST_PREPROCESSOR_BOOL(BOOST_PREPROCESSOR_ADD(BOOST_PREPROCESSOR_SUB(X,Y),BOOST_PREPROCESSOR_SUB(Y,X)))
#endif

View File

@ -0,0 +1,161 @@
#ifndef BOOST_PREPROCESSOR_DEC_HPP
#define BOOST_PREPROCESSOR_DEC_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/dec.hpp">Click here to see the header.</a>
*/
//! Decrements X expanding to a single token.
/*!
BOOST_PREPROCESSOR_DEC() uses saturation arithmetic. Decrementing 0 yeilds a 0.
Only decimal integer literals in the range [0,BOOST_PREPROCESSOR_LIMIT_MAG] are
supported.
*/
#define BOOST_PREPROCESSOR_DEC(X) BOOST_PREPROCESSOR_DEC_DELAY(X)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_DEC_DELAY(X) BOOST_PREPROCESSOR_DEC##X
#define BOOST_PREPROCESSOR_DEC0 0
#define BOOST_PREPROCESSOR_DEC1 0
#define BOOST_PREPROCESSOR_DEC2 1
#define BOOST_PREPROCESSOR_DEC3 2
#define BOOST_PREPROCESSOR_DEC4 3
#define BOOST_PREPROCESSOR_DEC5 4
#define BOOST_PREPROCESSOR_DEC6 5
#define BOOST_PREPROCESSOR_DEC7 6
#define BOOST_PREPROCESSOR_DEC8 7
#define BOOST_PREPROCESSOR_DEC9 8
#define BOOST_PREPROCESSOR_DEC10 9
#define BOOST_PREPROCESSOR_DEC11 10
#define BOOST_PREPROCESSOR_DEC12 11
#define BOOST_PREPROCESSOR_DEC13 12
#define BOOST_PREPROCESSOR_DEC14 13
#define BOOST_PREPROCESSOR_DEC15 14
#define BOOST_PREPROCESSOR_DEC16 15
#define BOOST_PREPROCESSOR_DEC17 16
#define BOOST_PREPROCESSOR_DEC18 17
#define BOOST_PREPROCESSOR_DEC19 18
#define BOOST_PREPROCESSOR_DEC20 19
#define BOOST_PREPROCESSOR_DEC21 20
#define BOOST_PREPROCESSOR_DEC22 21
#define BOOST_PREPROCESSOR_DEC23 22
#define BOOST_PREPROCESSOR_DEC24 23
#define BOOST_PREPROCESSOR_DEC25 24
#define BOOST_PREPROCESSOR_DEC26 25
#define BOOST_PREPROCESSOR_DEC27 26
#define BOOST_PREPROCESSOR_DEC28 27
#define BOOST_PREPROCESSOR_DEC29 28
#define BOOST_PREPROCESSOR_DEC30 29
#define BOOST_PREPROCESSOR_DEC31 30
#define BOOST_PREPROCESSOR_DEC32 31
#define BOOST_PREPROCESSOR_DEC33 32
#define BOOST_PREPROCESSOR_DEC34 33
#define BOOST_PREPROCESSOR_DEC35 34
#define BOOST_PREPROCESSOR_DEC36 35
#define BOOST_PREPROCESSOR_DEC37 36
#define BOOST_PREPROCESSOR_DEC38 37
#define BOOST_PREPROCESSOR_DEC39 38
#define BOOST_PREPROCESSOR_DEC40 39
#define BOOST_PREPROCESSOR_DEC41 40
#define BOOST_PREPROCESSOR_DEC42 41
#define BOOST_PREPROCESSOR_DEC43 42
#define BOOST_PREPROCESSOR_DEC44 43
#define BOOST_PREPROCESSOR_DEC45 44
#define BOOST_PREPROCESSOR_DEC46 45
#define BOOST_PREPROCESSOR_DEC47 46
#define BOOST_PREPROCESSOR_DEC48 47
#define BOOST_PREPROCESSOR_DEC49 48
#define BOOST_PREPROCESSOR_DEC50 49
#define BOOST_PREPROCESSOR_DEC51 50
#define BOOST_PREPROCESSOR_DEC52 51
#define BOOST_PREPROCESSOR_DEC53 52
#define BOOST_PREPROCESSOR_DEC54 53
#define BOOST_PREPROCESSOR_DEC55 54
#define BOOST_PREPROCESSOR_DEC56 55
#define BOOST_PREPROCESSOR_DEC57 56
#define BOOST_PREPROCESSOR_DEC58 57
#define BOOST_PREPROCESSOR_DEC59 58
#define BOOST_PREPROCESSOR_DEC60 59
#define BOOST_PREPROCESSOR_DEC61 60
#define BOOST_PREPROCESSOR_DEC62 61
#define BOOST_PREPROCESSOR_DEC63 62
#define BOOST_PREPROCESSOR_DEC64 63
#define BOOST_PREPROCESSOR_DEC65 64
#define BOOST_PREPROCESSOR_DEC66 65
#define BOOST_PREPROCESSOR_DEC67 66
#define BOOST_PREPROCESSOR_DEC68 67
#define BOOST_PREPROCESSOR_DEC69 68
#define BOOST_PREPROCESSOR_DEC70 69
#define BOOST_PREPROCESSOR_DEC71 70
#define BOOST_PREPROCESSOR_DEC72 71
#define BOOST_PREPROCESSOR_DEC73 72
#define BOOST_PREPROCESSOR_DEC74 73
#define BOOST_PREPROCESSOR_DEC75 74
#define BOOST_PREPROCESSOR_DEC76 75
#define BOOST_PREPROCESSOR_DEC77 76
#define BOOST_PREPROCESSOR_DEC78 77
#define BOOST_PREPROCESSOR_DEC79 78
#define BOOST_PREPROCESSOR_DEC80 79
#define BOOST_PREPROCESSOR_DEC81 80
#define BOOST_PREPROCESSOR_DEC82 81
#define BOOST_PREPROCESSOR_DEC83 82
#define BOOST_PREPROCESSOR_DEC84 83
#define BOOST_PREPROCESSOR_DEC85 84
#define BOOST_PREPROCESSOR_DEC86 85
#define BOOST_PREPROCESSOR_DEC87 86
#define BOOST_PREPROCESSOR_DEC88 87
#define BOOST_PREPROCESSOR_DEC89 88
#define BOOST_PREPROCESSOR_DEC90 89
#define BOOST_PREPROCESSOR_DEC91 90
#define BOOST_PREPROCESSOR_DEC92 91
#define BOOST_PREPROCESSOR_DEC93 92
#define BOOST_PREPROCESSOR_DEC94 93
#define BOOST_PREPROCESSOR_DEC95 94
#define BOOST_PREPROCESSOR_DEC96 95
#define BOOST_PREPROCESSOR_DEC97 96
#define BOOST_PREPROCESSOR_DEC98 97
#define BOOST_PREPROCESSOR_DEC99 98
#define BOOST_PREPROCESSOR_DEC100 99
#define BOOST_PREPROCESSOR_DEC101 100
#define BOOST_PREPROCESSOR_DEC102 101
#define BOOST_PREPROCESSOR_DEC103 102
#define BOOST_PREPROCESSOR_DEC104 103
#define BOOST_PREPROCESSOR_DEC105 104
#define BOOST_PREPROCESSOR_DEC106 105
#define BOOST_PREPROCESSOR_DEC107 106
#define BOOST_PREPROCESSOR_DEC108 107
#define BOOST_PREPROCESSOR_DEC109 108
#define BOOST_PREPROCESSOR_DEC110 109
#define BOOST_PREPROCESSOR_DEC111 110
#define BOOST_PREPROCESSOR_DEC112 111
#define BOOST_PREPROCESSOR_DEC113 112
#define BOOST_PREPROCESSOR_DEC114 113
#define BOOST_PREPROCESSOR_DEC115 114
#define BOOST_PREPROCESSOR_DEC116 115
#define BOOST_PREPROCESSOR_DEC117 116
#define BOOST_PREPROCESSOR_DEC118 117
#define BOOST_PREPROCESSOR_DEC119 118
#define BOOST_PREPROCESSOR_DEC120 119
#define BOOST_PREPROCESSOR_DEC121 120
#define BOOST_PREPROCESSOR_DEC122 121
#define BOOST_PREPROCESSOR_DEC123 122
#define BOOST_PREPROCESSOR_DEC124 123
#define BOOST_PREPROCESSOR_DEC125 124
#define BOOST_PREPROCESSOR_DEC126 125
#define BOOST_PREPROCESSOR_DEC127 126
#define BOOST_PREPROCESSOR_DEC128 127
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,73 @@
#ifndef BOOST_PREPROCESSOR_EMPTY_HPP
#define BOOST_PREPROCESSOR_EMPTY_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/empty.hpp">Click here to see the header.</a>
*/
//! Expands to nothing. Used with BOOST_PREPROCESSOR_IF() and as an unused parameter.
/*!
Example usage as the implementation of BOOST_PREPROCESSOR_COMMA_IF(C):
<PRE>\verbatim
#define BOOST_PREPROCESSOR_COMMA_IF(C)\
BOOST_PREPROCESSOR_IF(C,BOOST_PREPROCESSOR_COMMA,BOOST_PREPROCESSOR_EMPTY)()
\endverbatim</PRE>
Example usage as an unused macro parameter:
<PRE>\verbatim
#define BOOST_PREPROCESSOR_DEF(CV)\
template<class base> \
CV typename implement_subscript_using_begin_subscript<base>::value_type&\
implement_subscript_using_begin_subscript<base>::operator[]\
( index_type \
i \
) CV \
{ return base::begin()[i]; \
}
BOOST_PREPROCESSOR_DEF(BOOST_PREPROCESSOR_EMPTY())
BOOST_PREPROCESSOR_DEF(const)
#undef BOOST_PREPROCESSOR_DEF
\endverbatim</PRE>
The above expands to:
<PRE>\verbatim
template<class base>
typename implement_subscript_using_begin_subscript<base>::value_type&
implement_subscript_using_begin_subscript<base>::operator[]
( index_type
i
)
{ return base::begin()[i];
}
template<class base>
const typename implement_subscript_using_begin_subscript<base>::value_type&
implement_subscript_using_begin_subscript<base>::operator[]
( index_type
i
) const
{ return base::begin()[i];
}
\endverbatim</PRE>
In case you wonder, the above code is part of a generalized layer for
implementing the subscripting operators of a random access container.
*/
#define BOOST_PREPROCESSOR_EMPTY()
#endif

View File

@ -0,0 +1,42 @@
#ifndef BOOST_PREPROCESSOR_ENUM_PARAMS_HPP
#define BOOST_PREPROCESSOR_ENUM_PARAMS_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/enum_params.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_COMMA_IF_HPP
# include <boost/preprocessor/comma_if.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_REPEAT_HPP
# include <boost/preprocessor/repeat.hpp>
#endif
//! Generates a comma separated list of parameters.
/*!
In other words, expands to the sequence:
<PRE>\verbatim
P##0, P##1, ..., P##N-1
\endverbatim</PRE>
NOTE: The implementation uses BOOST_PREPROCESSOR_REPEAT().
*/
#define BOOST_PREPROCESSOR_ENUM_PARAMS(N,P) BOOST_PREPROCESSOR_REPEAT(N,BOOST_PREPROCESSOR_PARAM,P)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_PARAM(I,P) BOOST_PREPROCESSOR_COMMA_IF(I) P##I
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,48 @@
#ifndef BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT_HPP
#define BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/enum_params_with_a_default.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_CAT_HPP
# include <boost/preprocessor/cat.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_COMMA_IF_HPP
# include <boost/preprocessor/comma_if.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_REPEAT_HPP
# include <boost/preprocessor/repeat.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_TUPLE_HPP
# include <boost/preprocessor/tuple.hpp>
#endif
//! Generates a comma separated list of parameters with a default.
/*!
In other words, expands to the sequence:
<PRE>\verbatim
P##0 = D, P##1 = D, ..., P##N-1 = D
\endverbatim</PRE>
NOTE: The implementation uses BOOST_PREPROCESSOR_REPEAT().
*/
#define BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT(N,P,D) BOOST_PREPROCESSOR_REPEAT(N,BOOST_PREPROCESSOR_PARAM_WITH_A_DEFAULT,(P,D))
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_PARAM_WITH_A_DEFAULT(I,PD) BOOST_PREPROCESSOR_COMMA_IF(I) BOOST_PREPROCESSOR_CAT(BOOST_PREPROCESSOR_TUPLE_ELEM(2,0,PD),I)=BOOST_PREPROCESSOR_TUPLE_ELEM(2,1,PD)
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,48 @@
#ifndef BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS_HPP
#define BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/enum_params_with_defaults.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_CAT_HPP
# include <boost/preprocessor/cat.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_COMMA_IF_HPP
# include <boost/preprocessor/comma_if.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_REPEAT_HPP
# include <boost/preprocessor/repeat.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_TUPLE_HPP
# include <boost/preprocessor/tuple.hpp>
#endif
//! Generates a comma separated list of parameters with defaults.
/*!
In other words, expands to the sequence:
<PRE>\verbatim
P##0 = D##0, P##1 = D##1, ..., P##N-1 = D##N-1
\endverbatim</PRE>
NOTE: The implementation uses BOOST_PREPROCESSOR_REPEAT().
*/
#define BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS(N,P,D) BOOST_PREPROCESSOR_REPEAT(N,BOOST_PREPROCESSOR_PARAM_WITH_DEFAULT,(P,D))
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_PARAM_WITH_DEFAULT(I,PD) BOOST_PREPROCESSOR_COMMA_IF(I) BOOST_PREPROCESSOR_CAT(BOOST_PREPROCESSOR_TUPLE_ELEM(2,0,PD),I)=BOOST_PREPROCESSOR_CAT(BOOST_PREPROCESSOR_TUPLE_ELEM(2,1,PD),I)
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,57 @@
#ifndef BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS_HPP
#define BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/enum_shifted_params.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_CAT_HPP
# include <boost/preprocessor/cat.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_COMMA_IF_HPP
# include <boost/preprocessor/comma_if.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_DEC_HPP
# include <boost/preprocessor/dec.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_INC_HPP
# include <boost/preprocessor/inc.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_REPEAT_HPP
# include <boost/preprocessor/repeat.hpp>
#endif
//! Generates a comma separated list of shifted actual parameters.
/*!
In other words, expands to the sequence:
<PRE>\verbatim
P##1, P##2, ..., P##N-1
\endverbatim</PRE>
NOTE: The implementation uses BOOST_PREPROCESSOR_REPEAT().
RATIONALE:
- This macro facilitates a typical usage of the library. Shifted parameter
lists are common in template metaprograms.
- ENUM_SHIFTED_PARAMS must be tested so that the shifted range is shown to be
correct.
*/
#define BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS(N,P) BOOST_PREPROCESSOR_REPEAT(BOOST_PREPROCESSOR_DEC(N),BOOST_PREPROCESSOR_SHIFTED_PARAM,P)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_SHIFTED_PARAM(I,P) BOOST_PREPROCESSOR_COMMA_IF(I) BOOST_PREPROCESSOR_CAT(P,BOOST_PREPROCESSOR_INC(I))
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,44 @@
#ifndef BOOST_PREPROCESSOR_IDENTITY_HPP
#define BOOST_PREPROCESSOR_IDENTITY_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/identity.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_EMPTY_HPP
# include <boost/preprocessor/empty.hpp>
#endif
//! Expands to X once invoked.
/*!
Designed to be used with BOOST_PREPROCESSOR_IF(), when one of the clauses need to be invoked.
Example:
<PRE>\verbatim
BOOST_PREPROCESSOR_IDENTITY(X)()
// ^^ NOTE!
\endverbatim</PRE>
The above expands to:
<PRE>\verbatim
X
\endverbatim</PRE>
NOTE: If BOOST_PREPROCESSOR_IDENTITY() is not invoked, the expansion will not be usable.
*/
#define BOOST_PREPROCESSOR_IDENTITY(X) X BOOST_PREPROCESSOR_EMPTY
#endif

View File

@ -0,0 +1,37 @@
#ifndef BOOST_PREPROCESSOR_IF_HPP
#define BOOST_PREPROCESSOR_IF_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/if.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP
# include <boost/preprocessor/logical/bool.hpp>
#endif
//! Expands to T if C != 0 and E if C == 0.
/*!
BOOST_PREPROCESSOR_IF() enables convenient generation of lists using
BOOST_PREPROCESSOR_REPEAT().
*/
#define BOOST_PREPROCESSOR_IF(C,T,E) BOOST_PREPROCESSOR_IF_BOOL(BOOST_PREPROCESSOR_BOOL(C),T,E)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_IF_BOOL(C,T,E) BOOST_PREPROCESSOR_IF_BOOL_DELAY(C,T,E)
#define BOOST_PREPROCESSOR_IF_BOOL_DELAY(C,T,E) BOOST_PREPROCESSOR_IF_BOOL##C(T,E)
#define BOOST_PREPROCESSOR_IF_BOOL0(T,E) E
#define BOOST_PREPROCESSOR_IF_BOOL1(T,E) T
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,162 @@
#ifndef BOOST_PREPROCESSOR_INC_HPP
#define BOOST_PREPROCESSOR_INC_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/inc.hpp">Click here to see the header.</a>
*/
//! Increments X expanding to a single token.
/*!
BOOST_PREPROCESSOR_INC() uses saturation arithmetic. Incrementing a
BOOST_PREPROCESSOR_LIMIT_MAG yields a BOOST_PREPROCESSOR_LIMIT_MAG.
Only decimal integer literals in the range [0,BOOST_PREPROCESSOR_LIMIT_MAG] are
supported.
*/
#define BOOST_PREPROCESSOR_INC(X) BOOST_PREPROCESSOR_INC_DELAY(X)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_INC_DELAY(X) BOOST_PREPROCESSOR_INC##X
#define BOOST_PREPROCESSOR_INC0 1
#define BOOST_PREPROCESSOR_INC1 2
#define BOOST_PREPROCESSOR_INC2 3
#define BOOST_PREPROCESSOR_INC3 4
#define BOOST_PREPROCESSOR_INC4 5
#define BOOST_PREPROCESSOR_INC5 6
#define BOOST_PREPROCESSOR_INC6 7
#define BOOST_PREPROCESSOR_INC7 8
#define BOOST_PREPROCESSOR_INC8 9
#define BOOST_PREPROCESSOR_INC9 10
#define BOOST_PREPROCESSOR_INC10 11
#define BOOST_PREPROCESSOR_INC11 12
#define BOOST_PREPROCESSOR_INC12 13
#define BOOST_PREPROCESSOR_INC13 14
#define BOOST_PREPROCESSOR_INC14 15
#define BOOST_PREPROCESSOR_INC15 16
#define BOOST_PREPROCESSOR_INC16 17
#define BOOST_PREPROCESSOR_INC17 18
#define BOOST_PREPROCESSOR_INC18 19
#define BOOST_PREPROCESSOR_INC19 20
#define BOOST_PREPROCESSOR_INC20 21
#define BOOST_PREPROCESSOR_INC21 22
#define BOOST_PREPROCESSOR_INC22 23
#define BOOST_PREPROCESSOR_INC23 24
#define BOOST_PREPROCESSOR_INC24 25
#define BOOST_PREPROCESSOR_INC25 26
#define BOOST_PREPROCESSOR_INC26 27
#define BOOST_PREPROCESSOR_INC27 28
#define BOOST_PREPROCESSOR_INC28 29
#define BOOST_PREPROCESSOR_INC29 30
#define BOOST_PREPROCESSOR_INC30 31
#define BOOST_PREPROCESSOR_INC31 32
#define BOOST_PREPROCESSOR_INC32 33
#define BOOST_PREPROCESSOR_INC33 34
#define BOOST_PREPROCESSOR_INC34 35
#define BOOST_PREPROCESSOR_INC35 36
#define BOOST_PREPROCESSOR_INC36 37
#define BOOST_PREPROCESSOR_INC37 38
#define BOOST_PREPROCESSOR_INC38 39
#define BOOST_PREPROCESSOR_INC39 40
#define BOOST_PREPROCESSOR_INC40 41
#define BOOST_PREPROCESSOR_INC41 42
#define BOOST_PREPROCESSOR_INC42 43
#define BOOST_PREPROCESSOR_INC43 44
#define BOOST_PREPROCESSOR_INC44 45
#define BOOST_PREPROCESSOR_INC45 46
#define BOOST_PREPROCESSOR_INC46 47
#define BOOST_PREPROCESSOR_INC47 48
#define BOOST_PREPROCESSOR_INC48 49
#define BOOST_PREPROCESSOR_INC49 50
#define BOOST_PREPROCESSOR_INC50 51
#define BOOST_PREPROCESSOR_INC51 52
#define BOOST_PREPROCESSOR_INC52 53
#define BOOST_PREPROCESSOR_INC53 54
#define BOOST_PREPROCESSOR_INC54 55
#define BOOST_PREPROCESSOR_INC55 56
#define BOOST_PREPROCESSOR_INC56 57
#define BOOST_PREPROCESSOR_INC57 58
#define BOOST_PREPROCESSOR_INC58 59
#define BOOST_PREPROCESSOR_INC59 60
#define BOOST_PREPROCESSOR_INC60 61
#define BOOST_PREPROCESSOR_INC61 62
#define BOOST_PREPROCESSOR_INC62 63
#define BOOST_PREPROCESSOR_INC63 64
#define BOOST_PREPROCESSOR_INC64 65
#define BOOST_PREPROCESSOR_INC65 66
#define BOOST_PREPROCESSOR_INC66 67
#define BOOST_PREPROCESSOR_INC67 68
#define BOOST_PREPROCESSOR_INC68 69
#define BOOST_PREPROCESSOR_INC69 70
#define BOOST_PREPROCESSOR_INC70 71
#define BOOST_PREPROCESSOR_INC71 72
#define BOOST_PREPROCESSOR_INC72 73
#define BOOST_PREPROCESSOR_INC73 74
#define BOOST_PREPROCESSOR_INC74 75
#define BOOST_PREPROCESSOR_INC75 76
#define BOOST_PREPROCESSOR_INC76 77
#define BOOST_PREPROCESSOR_INC77 78
#define BOOST_PREPROCESSOR_INC78 79
#define BOOST_PREPROCESSOR_INC79 80
#define BOOST_PREPROCESSOR_INC80 81
#define BOOST_PREPROCESSOR_INC81 82
#define BOOST_PREPROCESSOR_INC82 83
#define BOOST_PREPROCESSOR_INC83 84
#define BOOST_PREPROCESSOR_INC84 85
#define BOOST_PREPROCESSOR_INC85 86
#define BOOST_PREPROCESSOR_INC86 87
#define BOOST_PREPROCESSOR_INC87 88
#define BOOST_PREPROCESSOR_INC88 89
#define BOOST_PREPROCESSOR_INC89 90
#define BOOST_PREPROCESSOR_INC90 91
#define BOOST_PREPROCESSOR_INC91 92
#define BOOST_PREPROCESSOR_INC92 93
#define BOOST_PREPROCESSOR_INC93 94
#define BOOST_PREPROCESSOR_INC94 95
#define BOOST_PREPROCESSOR_INC95 96
#define BOOST_PREPROCESSOR_INC96 97
#define BOOST_PREPROCESSOR_INC97 98
#define BOOST_PREPROCESSOR_INC98 99
#define BOOST_PREPROCESSOR_INC99 100
#define BOOST_PREPROCESSOR_INC100 101
#define BOOST_PREPROCESSOR_INC101 102
#define BOOST_PREPROCESSOR_INC102 103
#define BOOST_PREPROCESSOR_INC103 104
#define BOOST_PREPROCESSOR_INC104 105
#define BOOST_PREPROCESSOR_INC105 106
#define BOOST_PREPROCESSOR_INC106 107
#define BOOST_PREPROCESSOR_INC107 108
#define BOOST_PREPROCESSOR_INC108 109
#define BOOST_PREPROCESSOR_INC109 110
#define BOOST_PREPROCESSOR_INC110 111
#define BOOST_PREPROCESSOR_INC111 112
#define BOOST_PREPROCESSOR_INC112 113
#define BOOST_PREPROCESSOR_INC113 114
#define BOOST_PREPROCESSOR_INC114 115
#define BOOST_PREPROCESSOR_INC115 116
#define BOOST_PREPROCESSOR_INC116 117
#define BOOST_PREPROCESSOR_INC117 118
#define BOOST_PREPROCESSOR_INC118 119
#define BOOST_PREPROCESSOR_INC119 120
#define BOOST_PREPROCESSOR_INC120 121
#define BOOST_PREPROCESSOR_INC121 122
#define BOOST_PREPROCESSOR_INC122 123
#define BOOST_PREPROCESSOR_INC123 124
#define BOOST_PREPROCESSOR_INC124 125
#define BOOST_PREPROCESSOR_INC125 126
#define BOOST_PREPROCESSOR_INC126 127
#define BOOST_PREPROCESSOR_INC127 128
#define BOOST_PREPROCESSOR_INC128 128
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,36 @@
#ifndef BOOST_PREPROCESSOR_LIMITS_HPP
#define BOOST_PREPROCESSOR_LIMITS_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/limits.hpp">Click here to see the header.</a>
*/
//! Expands to the number of dimensions of repeat supported by the library.
#define BOOST_PREPROCESSOR_LIMIT_DIM 3
//! Expands to the maximum straight numeric literal supported by the library.
/*!
NOTES:
- Only decimal integer literals in the range [0,BOOST_PREPROCESSOR_LIMIT_MAG]
are supported.
- All arithmetic operations (ADD,SUB,MUL,DIV) use saturation arithmetic.
- The maximum repetition count supported by the library may not be reached
due to compiler limitations.
*/
#define BOOST_PREPROCESSOR_LIMIT_MAG 128
//! Expands to the maximum tuple length supported by the library.
#define BOOST_PREPROCESSOR_LIMIT_TUPLE 8
#endif

View File

@ -0,0 +1,38 @@
#ifndef BOOST_PREPROCESSOR_LOGICAL_HPP
#define BOOST_PREPROCESSOR_LOGICAL_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/logical.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_LOGICAL_AND_HPP
# include <boost/preprocessor/logical/and.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP
# include <boost/preprocessor/logical/bool.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_LOGICAL_NOR_HPP
# include <boost/preprocessor/logical/nor.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_LOGICAL_NOT_HPP
# include <boost/preprocessor/logical/not.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_LOGICAL_OR_HPP
# include <boost/preprocessor/logical/or.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_LOGICAL_XOR_HPP
# include <boost/preprocessor/logical/xor.hpp>
#endif
#endif

View File

@ -0,0 +1,29 @@
#ifndef BOOST_PREPROCESSOR_LOGICAL_AND_HPP
#define BOOST_PREPROCESSOR_LOGICAL_AND_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/logical/and.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_LOGICAL_NOR_HPP
# include <boost/preprocessor/logical/nor.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_LOGICAL_NOT_HPP
# include <boost/preprocessor/logical/not.hpp>
#endif
//! Expands to the logical AND of the operands.
#define BOOST_PREPROCESSOR_AND(X,Y) BOOST_PREPROCESSOR_NOR(BOOST_PREPROCESSOR_NOT(X),BOOST_PREPROCESSOR_NOT(Y))
#endif

View File

@ -0,0 +1,157 @@
#ifndef BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP
#define BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/logical/bool.hpp">Click here to see the header.</a>
*/
//! Expands to 0 if X == 0 and 1 if X != 0.
#define BOOST_PREPROCESSOR_BOOL(X) BOOST_PREPROCESSOR_BOOL_DELAY(X)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
// BOOL can be implemented in O(1) tokens using saturated ADD & SUB.
// Unfortunately, it would result in significantly slower preprocessing.
#define BOOST_PREPROCESSOR_BOOL_DELAY(X) BOOST_PREPROCESSOR_BOOL##X
#define BOOST_PREPROCESSOR_BOOL0 0
#define BOOST_PREPROCESSOR_BOOL1 1
#define BOOST_PREPROCESSOR_BOOL2 1
#define BOOST_PREPROCESSOR_BOOL3 1
#define BOOST_PREPROCESSOR_BOOL4 1
#define BOOST_PREPROCESSOR_BOOL5 1
#define BOOST_PREPROCESSOR_BOOL6 1
#define BOOST_PREPROCESSOR_BOOL7 1
#define BOOST_PREPROCESSOR_BOOL8 1
#define BOOST_PREPROCESSOR_BOOL9 1
#define BOOST_PREPROCESSOR_BOOL10 1
#define BOOST_PREPROCESSOR_BOOL11 1
#define BOOST_PREPROCESSOR_BOOL12 1
#define BOOST_PREPROCESSOR_BOOL13 1
#define BOOST_PREPROCESSOR_BOOL14 1
#define BOOST_PREPROCESSOR_BOOL15 1
#define BOOST_PREPROCESSOR_BOOL16 1
#define BOOST_PREPROCESSOR_BOOL17 1
#define BOOST_PREPROCESSOR_BOOL18 1
#define BOOST_PREPROCESSOR_BOOL19 1
#define BOOST_PREPROCESSOR_BOOL20 1
#define BOOST_PREPROCESSOR_BOOL21 1
#define BOOST_PREPROCESSOR_BOOL22 1
#define BOOST_PREPROCESSOR_BOOL23 1
#define BOOST_PREPROCESSOR_BOOL24 1
#define BOOST_PREPROCESSOR_BOOL25 1
#define BOOST_PREPROCESSOR_BOOL26 1
#define BOOST_PREPROCESSOR_BOOL27 1
#define BOOST_PREPROCESSOR_BOOL28 1
#define BOOST_PREPROCESSOR_BOOL29 1
#define BOOST_PREPROCESSOR_BOOL30 1
#define BOOST_PREPROCESSOR_BOOL31 1
#define BOOST_PREPROCESSOR_BOOL32 1
#define BOOST_PREPROCESSOR_BOOL33 1
#define BOOST_PREPROCESSOR_BOOL34 1
#define BOOST_PREPROCESSOR_BOOL35 1
#define BOOST_PREPROCESSOR_BOOL36 1
#define BOOST_PREPROCESSOR_BOOL37 1
#define BOOST_PREPROCESSOR_BOOL38 1
#define BOOST_PREPROCESSOR_BOOL39 1
#define BOOST_PREPROCESSOR_BOOL40 1
#define BOOST_PREPROCESSOR_BOOL41 1
#define BOOST_PREPROCESSOR_BOOL42 1
#define BOOST_PREPROCESSOR_BOOL43 1
#define BOOST_PREPROCESSOR_BOOL44 1
#define BOOST_PREPROCESSOR_BOOL45 1
#define BOOST_PREPROCESSOR_BOOL46 1
#define BOOST_PREPROCESSOR_BOOL47 1
#define BOOST_PREPROCESSOR_BOOL48 1
#define BOOST_PREPROCESSOR_BOOL49 1
#define BOOST_PREPROCESSOR_BOOL50 1
#define BOOST_PREPROCESSOR_BOOL51 1
#define BOOST_PREPROCESSOR_BOOL52 1
#define BOOST_PREPROCESSOR_BOOL53 1
#define BOOST_PREPROCESSOR_BOOL54 1
#define BOOST_PREPROCESSOR_BOOL55 1
#define BOOST_PREPROCESSOR_BOOL56 1
#define BOOST_PREPROCESSOR_BOOL57 1
#define BOOST_PREPROCESSOR_BOOL58 1
#define BOOST_PREPROCESSOR_BOOL59 1
#define BOOST_PREPROCESSOR_BOOL60 1
#define BOOST_PREPROCESSOR_BOOL61 1
#define BOOST_PREPROCESSOR_BOOL62 1
#define BOOST_PREPROCESSOR_BOOL63 1
#define BOOST_PREPROCESSOR_BOOL64 1
#define BOOST_PREPROCESSOR_BOOL65 1
#define BOOST_PREPROCESSOR_BOOL66 1
#define BOOST_PREPROCESSOR_BOOL67 1
#define BOOST_PREPROCESSOR_BOOL68 1
#define BOOST_PREPROCESSOR_BOOL69 1
#define BOOST_PREPROCESSOR_BOOL70 1
#define BOOST_PREPROCESSOR_BOOL71 1
#define BOOST_PREPROCESSOR_BOOL72 1
#define BOOST_PREPROCESSOR_BOOL73 1
#define BOOST_PREPROCESSOR_BOOL74 1
#define BOOST_PREPROCESSOR_BOOL75 1
#define BOOST_PREPROCESSOR_BOOL76 1
#define BOOST_PREPROCESSOR_BOOL77 1
#define BOOST_PREPROCESSOR_BOOL78 1
#define BOOST_PREPROCESSOR_BOOL79 1
#define BOOST_PREPROCESSOR_BOOL80 1
#define BOOST_PREPROCESSOR_BOOL81 1
#define BOOST_PREPROCESSOR_BOOL82 1
#define BOOST_PREPROCESSOR_BOOL83 1
#define BOOST_PREPROCESSOR_BOOL84 1
#define BOOST_PREPROCESSOR_BOOL85 1
#define BOOST_PREPROCESSOR_BOOL86 1
#define BOOST_PREPROCESSOR_BOOL87 1
#define BOOST_PREPROCESSOR_BOOL88 1
#define BOOST_PREPROCESSOR_BOOL89 1
#define BOOST_PREPROCESSOR_BOOL90 1
#define BOOST_PREPROCESSOR_BOOL91 1
#define BOOST_PREPROCESSOR_BOOL92 1
#define BOOST_PREPROCESSOR_BOOL93 1
#define BOOST_PREPROCESSOR_BOOL94 1
#define BOOST_PREPROCESSOR_BOOL95 1
#define BOOST_PREPROCESSOR_BOOL96 1
#define BOOST_PREPROCESSOR_BOOL97 1
#define BOOST_PREPROCESSOR_BOOL98 1
#define BOOST_PREPROCESSOR_BOOL99 1
#define BOOST_PREPROCESSOR_BOOL100 1
#define BOOST_PREPROCESSOR_BOOL101 1
#define BOOST_PREPROCESSOR_BOOL102 1
#define BOOST_PREPROCESSOR_BOOL103 1
#define BOOST_PREPROCESSOR_BOOL104 1
#define BOOST_PREPROCESSOR_BOOL105 1
#define BOOST_PREPROCESSOR_BOOL106 1
#define BOOST_PREPROCESSOR_BOOL107 1
#define BOOST_PREPROCESSOR_BOOL108 1
#define BOOST_PREPROCESSOR_BOOL109 1
#define BOOST_PREPROCESSOR_BOOL110 1
#define BOOST_PREPROCESSOR_BOOL111 1
#define BOOST_PREPROCESSOR_BOOL112 1
#define BOOST_PREPROCESSOR_BOOL113 1
#define BOOST_PREPROCESSOR_BOOL114 1
#define BOOST_PREPROCESSOR_BOOL115 1
#define BOOST_PREPROCESSOR_BOOL116 1
#define BOOST_PREPROCESSOR_BOOL117 1
#define BOOST_PREPROCESSOR_BOOL118 1
#define BOOST_PREPROCESSOR_BOOL119 1
#define BOOST_PREPROCESSOR_BOOL120 1
#define BOOST_PREPROCESSOR_BOOL121 1
#define BOOST_PREPROCESSOR_BOOL122 1
#define BOOST_PREPROCESSOR_BOOL123 1
#define BOOST_PREPROCESSOR_BOOL124 1
#define BOOST_PREPROCESSOR_BOOL125 1
#define BOOST_PREPROCESSOR_BOOL126 1
#define BOOST_PREPROCESSOR_BOOL127 1
#define BOOST_PREPROCESSOR_BOOL128 1
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,35 @@
#ifndef BOOST_PREPROCESSOR_LOGICAL_NOR_HPP
#define BOOST_PREPROCESSOR_LOGICAL_NOR_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/logical/nor.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_LOGICAL_BOOL_HPP
# include <boost/preprocessor/logical/bool.hpp>
#endif
//! Expands to the logical NEITHER OR of the operands.
#define BOOST_PREPROCESSOR_NOR(X,Y) BOOST_PREPROCESSOR_NOR_BOOL(BOOST_PREPROCESSOR_BOOL(X),BOOST_PREPROCESSOR_BOOL(Y))
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_NOR_BOOL(X,Y) BOOST_PREPROCESSOR_NOR_BOOL_DELAY(X,Y)
#define BOOST_PREPROCESSOR_NOR_BOOL_DELAY(X,Y) BOOST_PREPROCESSOR_NOR_BOOL##X##Y
#define BOOST_PREPROCESSOR_NOR_BOOL00 1
#define BOOST_PREPROCESSOR_NOR_BOOL01 0
#define BOOST_PREPROCESSOR_NOR_BOOL10 0
#define BOOST_PREPROCESSOR_NOR_BOOL11 0
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,26 @@
#ifndef BOOST_PREPROCESSOR_LOGICAL_NOT_HPP
#define BOOST_PREPROCESSOR_LOGICAL_NOT_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/logical/not.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_LOGICAL_NOR_HPP
# include <boost/preprocessor/logical/nor.hpp>
#endif
//! Expands to the logical NOT of the operand.
#define BOOST_PREPROCESSOR_NOT(X) BOOST_PREPROCESSOR_NOR(X,X)
#endif

View File

@ -0,0 +1,29 @@
#ifndef BOOST_PREPROCESSOR_LOGICAL_OR_HPP
#define BOOST_PREPROCESSOR_LOGICAL_OR_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/logical/or.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_LOGICAL_NOR_HPP
# include <boost/preprocessor/logical/nor.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_LOGICAL_NOT_HPP
# include <boost/preprocessor/logical/not.hpp>
#endif
//! Expands to the logical OR of the operands.
#define BOOST_PREPROCESSOR_OR(X,Y) BOOST_PREPROCESSOR_NOT(BOOST_PREPROCESSOR_NOR(X,Y))
#endif

View File

@ -0,0 +1,29 @@
#ifndef BOOST_PREPROCESSOR_LOGICAL_XOR_HPP
#define BOOST_PREPROCESSOR_LOGICAL_XOR_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/logical/xor.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_LOGICAL_AND_HPP
# include <boost/preprocessor/logical/and.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_LOGICAL_NOR_HPP
# include <boost/preprocessor/logical/nor.hpp>
#endif
//! Expands to the logical EXCLUSIVE OR of the operands.
#define BOOST_PREPROCESSOR_XOR(X,Y) BOOST_PREPROCESSOR_NOR(BOOST_PREPROCESSOR_NOR(X,Y),BOOST_PREPROCESSOR_AND(X,Y))
#endif

View File

@ -0,0 +1,29 @@
#ifndef BOOST_PREPROCESSOR_MAX_HPP
#define BOOST_PREPROCESSOR_MAX_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/max.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_HPP
# include <boost/preprocessor/comparison/less.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_IF_HPP
# include <boost/preprocessor/if.hpp>
#endif
//! Expands to the maximum of X and Y.
#define BOOST_PREPROCESSOR_MAX(X,Y) BOOST_PREPROCESSOR_IF(BOOST_PREPROCESSOR_LESS(X,Y),Y,X)
#endif

View File

@ -0,0 +1,29 @@
#ifndef BOOST_PREPROCESSOR_MIN_HPP
#define BOOST_PREPROCESSOR_MIN_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/min.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_COMPARISON_LESS_HPP
# include <boost/preprocessor/comparison/less.hpp>
#endif
#ifndef BOOST_PREPROCESSOR_IF_HPP
# include <boost/preprocessor/if.hpp>
#endif
//! Expands to the minimum of X and Y.
#define BOOST_PREPROCESSOR_MIN(X,Y) BOOST_PREPROCESSOR_IF(BOOST_PREPROCESSOR_LESS(Y,X),Y,X)
#endif

View File

@ -0,0 +1,174 @@
#ifndef BOOST_PREPROCESSOR_REPEAT_HPP
#define BOOST_PREPROCESSOR_REPEAT_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/repeat.hpp">Click here to see the header.</a>
*/
//! Repeats the macro M(I,P) for I = 0 to N-1.
/*!
In other words, expands to the sequence:
<PRE>\verbatim
M(0,P) M(1,P) ... M(N-1,P)
\endverbatim</PRE>
See BOOST_PREPROCESSOR_LIMIT_MAG.
RATIONALE:
- BOOST_PREPROCESSOR_REPEAT, BOOST_PREPROCESSOR_REPEAT_2ND, ... must work together.
- BOOST_PREPROCESSOR_REPEAT is already tested with BOOST_PREPROCESSOR_ENUM_PARAMS.
- The tested repeat count should exceed imaginable usage.
- 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".
*/
#define BOOST_PREPROCESSOR_REPEAT(N,M,P) BOOST_PREPROCESSOR_REPEAT_DELAY(N,M,P)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_REPEAT_DELAY(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)
#define BOOST_PREPROCESSOR_REPEAT5(M,P) BOOST_PREPROCESSOR_REPEAT4(M,P) M(4,P)
#define BOOST_PREPROCESSOR_REPEAT6(M,P) BOOST_PREPROCESSOR_REPEAT5(M,P) M(5,P)
#define BOOST_PREPROCESSOR_REPEAT7(M,P) BOOST_PREPROCESSOR_REPEAT6(M,P) M(6,P)
#define BOOST_PREPROCESSOR_REPEAT8(M,P) BOOST_PREPROCESSOR_REPEAT7(M,P) M(7,P)
#define BOOST_PREPROCESSOR_REPEAT9(M,P) BOOST_PREPROCESSOR_REPEAT8(M,P) M(8,P)
#define BOOST_PREPROCESSOR_REPEAT10(M,P) BOOST_PREPROCESSOR_REPEAT9(M,P) M(9,P)
#define BOOST_PREPROCESSOR_REPEAT11(M,P) BOOST_PREPROCESSOR_REPEAT10(M,P) M(10,P)
#define BOOST_PREPROCESSOR_REPEAT12(M,P) BOOST_PREPROCESSOR_REPEAT11(M,P) M(11,P)
#define BOOST_PREPROCESSOR_REPEAT13(M,P) BOOST_PREPROCESSOR_REPEAT12(M,P) M(12,P)
#define BOOST_PREPROCESSOR_REPEAT14(M,P) BOOST_PREPROCESSOR_REPEAT13(M,P) M(13,P)
#define BOOST_PREPROCESSOR_REPEAT15(M,P) BOOST_PREPROCESSOR_REPEAT14(M,P) M(14,P)
#define BOOST_PREPROCESSOR_REPEAT16(M,P) BOOST_PREPROCESSOR_REPEAT15(M,P) M(15,P)
#define BOOST_PREPROCESSOR_REPEAT17(M,P) BOOST_PREPROCESSOR_REPEAT16(M,P) M(16,P)
#define BOOST_PREPROCESSOR_REPEAT18(M,P) BOOST_PREPROCESSOR_REPEAT17(M,P) M(17,P)
#define BOOST_PREPROCESSOR_REPEAT19(M,P) BOOST_PREPROCESSOR_REPEAT18(M,P) M(18,P)
#define BOOST_PREPROCESSOR_REPEAT20(M,P) BOOST_PREPROCESSOR_REPEAT19(M,P) M(19,P)
#define BOOST_PREPROCESSOR_REPEAT21(M,P) BOOST_PREPROCESSOR_REPEAT20(M,P) M(20,P)
#define BOOST_PREPROCESSOR_REPEAT22(M,P) BOOST_PREPROCESSOR_REPEAT21(M,P) M(21,P)
#define BOOST_PREPROCESSOR_REPEAT23(M,P) BOOST_PREPROCESSOR_REPEAT22(M,P) M(22,P)
#define BOOST_PREPROCESSOR_REPEAT24(M,P) BOOST_PREPROCESSOR_REPEAT23(M,P) M(23,P)
#define BOOST_PREPROCESSOR_REPEAT25(M,P) BOOST_PREPROCESSOR_REPEAT24(M,P) M(24,P)
#define BOOST_PREPROCESSOR_REPEAT26(M,P) BOOST_PREPROCESSOR_REPEAT25(M,P) M(25,P)
#define BOOST_PREPROCESSOR_REPEAT27(M,P) BOOST_PREPROCESSOR_REPEAT26(M,P) M(26,P)
#define BOOST_PREPROCESSOR_REPEAT28(M,P) BOOST_PREPROCESSOR_REPEAT27(M,P) M(27,P)
#define BOOST_PREPROCESSOR_REPEAT29(M,P) BOOST_PREPROCESSOR_REPEAT28(M,P) M(28,P)
#define BOOST_PREPROCESSOR_REPEAT30(M,P) BOOST_PREPROCESSOR_REPEAT29(M,P) M(29,P)
#define BOOST_PREPROCESSOR_REPEAT31(M,P) BOOST_PREPROCESSOR_REPEAT30(M,P) M(30,P)
#define BOOST_PREPROCESSOR_REPEAT32(M,P) BOOST_PREPROCESSOR_REPEAT31(M,P) M(31,P)
#define BOOST_PREPROCESSOR_REPEAT33(M,P) BOOST_PREPROCESSOR_REPEAT32(M,P) M(32,P)
#define BOOST_PREPROCESSOR_REPEAT34(M,P) BOOST_PREPROCESSOR_REPEAT33(M,P) M(33,P)
#define BOOST_PREPROCESSOR_REPEAT35(M,P) BOOST_PREPROCESSOR_REPEAT34(M,P) M(34,P)
#define BOOST_PREPROCESSOR_REPEAT36(M,P) BOOST_PREPROCESSOR_REPEAT35(M,P) M(35,P)
#define BOOST_PREPROCESSOR_REPEAT37(M,P) BOOST_PREPROCESSOR_REPEAT36(M,P) M(36,P)
#define BOOST_PREPROCESSOR_REPEAT38(M,P) BOOST_PREPROCESSOR_REPEAT37(M,P) M(37,P)
#define BOOST_PREPROCESSOR_REPEAT39(M,P) BOOST_PREPROCESSOR_REPEAT38(M,P) M(38,P)
#define BOOST_PREPROCESSOR_REPEAT40(M,P) BOOST_PREPROCESSOR_REPEAT39(M,P) M(39,P)
#define BOOST_PREPROCESSOR_REPEAT41(M,P) BOOST_PREPROCESSOR_REPEAT40(M,P) M(40,P)
#define BOOST_PREPROCESSOR_REPEAT42(M,P) BOOST_PREPROCESSOR_REPEAT41(M,P) M(41,P)
#define BOOST_PREPROCESSOR_REPEAT43(M,P) BOOST_PREPROCESSOR_REPEAT42(M,P) M(42,P)
#define BOOST_PREPROCESSOR_REPEAT44(M,P) BOOST_PREPROCESSOR_REPEAT43(M,P) M(43,P)
#define BOOST_PREPROCESSOR_REPEAT45(M,P) BOOST_PREPROCESSOR_REPEAT44(M,P) M(44,P)
#define BOOST_PREPROCESSOR_REPEAT46(M,P) BOOST_PREPROCESSOR_REPEAT45(M,P) M(45,P)
#define BOOST_PREPROCESSOR_REPEAT47(M,P) BOOST_PREPROCESSOR_REPEAT46(M,P) M(46,P)
#define BOOST_PREPROCESSOR_REPEAT48(M,P) BOOST_PREPROCESSOR_REPEAT47(M,P) M(47,P)
#define BOOST_PREPROCESSOR_REPEAT49(M,P) BOOST_PREPROCESSOR_REPEAT48(M,P) M(48,P)
#define BOOST_PREPROCESSOR_REPEAT50(M,P) BOOST_PREPROCESSOR_REPEAT49(M,P) M(49,P)
#define BOOST_PREPROCESSOR_REPEAT51(M,P) BOOST_PREPROCESSOR_REPEAT50(M,P) M(50,P)
#define BOOST_PREPROCESSOR_REPEAT52(M,P) BOOST_PREPROCESSOR_REPEAT51(M,P) M(51,P)
#define BOOST_PREPROCESSOR_REPEAT53(M,P) BOOST_PREPROCESSOR_REPEAT52(M,P) M(52,P)
#define BOOST_PREPROCESSOR_REPEAT54(M,P) BOOST_PREPROCESSOR_REPEAT53(M,P) M(53,P)
#define BOOST_PREPROCESSOR_REPEAT55(M,P) BOOST_PREPROCESSOR_REPEAT54(M,P) M(54,P)
#define BOOST_PREPROCESSOR_REPEAT56(M,P) BOOST_PREPROCESSOR_REPEAT55(M,P) M(55,P)
#define BOOST_PREPROCESSOR_REPEAT57(M,P) BOOST_PREPROCESSOR_REPEAT56(M,P) M(56,P)
#define BOOST_PREPROCESSOR_REPEAT58(M,P) BOOST_PREPROCESSOR_REPEAT57(M,P) M(57,P)
#define BOOST_PREPROCESSOR_REPEAT59(M,P) BOOST_PREPROCESSOR_REPEAT58(M,P) M(58,P)
#define BOOST_PREPROCESSOR_REPEAT60(M,P) BOOST_PREPROCESSOR_REPEAT59(M,P) M(59,P)
#define BOOST_PREPROCESSOR_REPEAT61(M,P) BOOST_PREPROCESSOR_REPEAT60(M,P) M(60,P)
#define BOOST_PREPROCESSOR_REPEAT62(M,P) BOOST_PREPROCESSOR_REPEAT61(M,P) M(61,P)
#define BOOST_PREPROCESSOR_REPEAT63(M,P) BOOST_PREPROCESSOR_REPEAT62(M,P) M(62,P)
#define BOOST_PREPROCESSOR_REPEAT64(M,P) BOOST_PREPROCESSOR_REPEAT63(M,P) M(63,P)
#define BOOST_PREPROCESSOR_REPEAT65(M,P) BOOST_PREPROCESSOR_REPEAT64(M,P) M(64,P)
#define BOOST_PREPROCESSOR_REPEAT66(M,P) BOOST_PREPROCESSOR_REPEAT65(M,P) M(65,P)
#define BOOST_PREPROCESSOR_REPEAT67(M,P) BOOST_PREPROCESSOR_REPEAT66(M,P) M(66,P)
#define BOOST_PREPROCESSOR_REPEAT68(M,P) BOOST_PREPROCESSOR_REPEAT67(M,P) M(67,P)
#define BOOST_PREPROCESSOR_REPEAT69(M,P) BOOST_PREPROCESSOR_REPEAT68(M,P) M(68,P)
#define BOOST_PREPROCESSOR_REPEAT70(M,P) BOOST_PREPROCESSOR_REPEAT69(M,P) M(69,P)
#define BOOST_PREPROCESSOR_REPEAT71(M,P) BOOST_PREPROCESSOR_REPEAT70(M,P) M(70,P)
#define BOOST_PREPROCESSOR_REPEAT72(M,P) BOOST_PREPROCESSOR_REPEAT71(M,P) M(71,P)
#define BOOST_PREPROCESSOR_REPEAT73(M,P) BOOST_PREPROCESSOR_REPEAT72(M,P) M(72,P)
#define BOOST_PREPROCESSOR_REPEAT74(M,P) BOOST_PREPROCESSOR_REPEAT73(M,P) M(73,P)
#define BOOST_PREPROCESSOR_REPEAT75(M,P) BOOST_PREPROCESSOR_REPEAT74(M,P) M(74,P)
#define BOOST_PREPROCESSOR_REPEAT76(M,P) BOOST_PREPROCESSOR_REPEAT75(M,P) M(75,P)
#define BOOST_PREPROCESSOR_REPEAT77(M,P) BOOST_PREPROCESSOR_REPEAT76(M,P) M(76,P)
#define BOOST_PREPROCESSOR_REPEAT78(M,P) BOOST_PREPROCESSOR_REPEAT77(M,P) M(77,P)
#define BOOST_PREPROCESSOR_REPEAT79(M,P) BOOST_PREPROCESSOR_REPEAT78(M,P) M(78,P)
#define BOOST_PREPROCESSOR_REPEAT80(M,P) BOOST_PREPROCESSOR_REPEAT79(M,P) M(79,P)
#define BOOST_PREPROCESSOR_REPEAT81(M,P) BOOST_PREPROCESSOR_REPEAT80(M,P) M(80,P)
#define BOOST_PREPROCESSOR_REPEAT82(M,P) BOOST_PREPROCESSOR_REPEAT81(M,P) M(81,P)
#define BOOST_PREPROCESSOR_REPEAT83(M,P) BOOST_PREPROCESSOR_REPEAT82(M,P) M(82,P)
#define BOOST_PREPROCESSOR_REPEAT84(M,P) BOOST_PREPROCESSOR_REPEAT83(M,P) M(83,P)
#define BOOST_PREPROCESSOR_REPEAT85(M,P) BOOST_PREPROCESSOR_REPEAT84(M,P) M(84,P)
#define BOOST_PREPROCESSOR_REPEAT86(M,P) BOOST_PREPROCESSOR_REPEAT85(M,P) M(85,P)
#define BOOST_PREPROCESSOR_REPEAT87(M,P) BOOST_PREPROCESSOR_REPEAT86(M,P) M(86,P)
#define BOOST_PREPROCESSOR_REPEAT88(M,P) BOOST_PREPROCESSOR_REPEAT87(M,P) M(87,P)
#define BOOST_PREPROCESSOR_REPEAT89(M,P) BOOST_PREPROCESSOR_REPEAT88(M,P) M(88,P)
#define BOOST_PREPROCESSOR_REPEAT90(M,P) BOOST_PREPROCESSOR_REPEAT89(M,P) M(89,P)
#define BOOST_PREPROCESSOR_REPEAT91(M,P) BOOST_PREPROCESSOR_REPEAT90(M,P) M(90,P)
#define BOOST_PREPROCESSOR_REPEAT92(M,P) BOOST_PREPROCESSOR_REPEAT91(M,P) M(91,P)
#define BOOST_PREPROCESSOR_REPEAT93(M,P) BOOST_PREPROCESSOR_REPEAT92(M,P) M(92,P)
#define BOOST_PREPROCESSOR_REPEAT94(M,P) BOOST_PREPROCESSOR_REPEAT93(M,P) M(93,P)
#define BOOST_PREPROCESSOR_REPEAT95(M,P) BOOST_PREPROCESSOR_REPEAT94(M,P) M(94,P)
#define BOOST_PREPROCESSOR_REPEAT96(M,P) BOOST_PREPROCESSOR_REPEAT95(M,P) M(95,P)
#define BOOST_PREPROCESSOR_REPEAT97(M,P) BOOST_PREPROCESSOR_REPEAT96(M,P) M(96,P)
#define BOOST_PREPROCESSOR_REPEAT98(M,P) BOOST_PREPROCESSOR_REPEAT97(M,P) M(97,P)
#define BOOST_PREPROCESSOR_REPEAT99(M,P) BOOST_PREPROCESSOR_REPEAT98(M,P) M(98,P)
#define BOOST_PREPROCESSOR_REPEAT100(M,P) BOOST_PREPROCESSOR_REPEAT99(M,P) M(99,P)
#define BOOST_PREPROCESSOR_REPEAT101(M,P) BOOST_PREPROCESSOR_REPEAT100(M,P) M(100,P)
#define BOOST_PREPROCESSOR_REPEAT102(M,P) BOOST_PREPROCESSOR_REPEAT101(M,P) M(101,P)
#define BOOST_PREPROCESSOR_REPEAT103(M,P) BOOST_PREPROCESSOR_REPEAT102(M,P) M(102,P)
#define BOOST_PREPROCESSOR_REPEAT104(M,P) BOOST_PREPROCESSOR_REPEAT103(M,P) M(103,P)
#define BOOST_PREPROCESSOR_REPEAT105(M,P) BOOST_PREPROCESSOR_REPEAT104(M,P) M(104,P)
#define BOOST_PREPROCESSOR_REPEAT106(M,P) BOOST_PREPROCESSOR_REPEAT105(M,P) M(105,P)
#define BOOST_PREPROCESSOR_REPEAT107(M,P) BOOST_PREPROCESSOR_REPEAT106(M,P) M(106,P)
#define BOOST_PREPROCESSOR_REPEAT108(M,P) BOOST_PREPROCESSOR_REPEAT107(M,P) M(107,P)
#define BOOST_PREPROCESSOR_REPEAT109(M,P) BOOST_PREPROCESSOR_REPEAT108(M,P) M(108,P)
#define BOOST_PREPROCESSOR_REPEAT110(M,P) BOOST_PREPROCESSOR_REPEAT109(M,P) M(109,P)
#define BOOST_PREPROCESSOR_REPEAT111(M,P) BOOST_PREPROCESSOR_REPEAT110(M,P) M(110,P)
#define BOOST_PREPROCESSOR_REPEAT112(M,P) BOOST_PREPROCESSOR_REPEAT111(M,P) M(111,P)
#define BOOST_PREPROCESSOR_REPEAT113(M,P) BOOST_PREPROCESSOR_REPEAT112(M,P) M(112,P)
#define BOOST_PREPROCESSOR_REPEAT114(M,P) BOOST_PREPROCESSOR_REPEAT113(M,P) M(113,P)
#define BOOST_PREPROCESSOR_REPEAT115(M,P) BOOST_PREPROCESSOR_REPEAT114(M,P) M(114,P)
#define BOOST_PREPROCESSOR_REPEAT116(M,P) BOOST_PREPROCESSOR_REPEAT115(M,P) M(115,P)
#define BOOST_PREPROCESSOR_REPEAT117(M,P) BOOST_PREPROCESSOR_REPEAT116(M,P) M(116,P)
#define BOOST_PREPROCESSOR_REPEAT118(M,P) BOOST_PREPROCESSOR_REPEAT117(M,P) M(117,P)
#define BOOST_PREPROCESSOR_REPEAT119(M,P) BOOST_PREPROCESSOR_REPEAT118(M,P) M(118,P)
#define BOOST_PREPROCESSOR_REPEAT120(M,P) BOOST_PREPROCESSOR_REPEAT119(M,P) M(119,P)
#define BOOST_PREPROCESSOR_REPEAT121(M,P) BOOST_PREPROCESSOR_REPEAT120(M,P) M(120,P)
#define BOOST_PREPROCESSOR_REPEAT122(M,P) BOOST_PREPROCESSOR_REPEAT121(M,P) M(121,P)
#define BOOST_PREPROCESSOR_REPEAT123(M,P) BOOST_PREPROCESSOR_REPEAT122(M,P) M(122,P)
#define BOOST_PREPROCESSOR_REPEAT124(M,P) BOOST_PREPROCESSOR_REPEAT123(M,P) M(123,P)
#define BOOST_PREPROCESSOR_REPEAT125(M,P) BOOST_PREPROCESSOR_REPEAT124(M,P) M(124,P)
#define BOOST_PREPROCESSOR_REPEAT126(M,P) BOOST_PREPROCESSOR_REPEAT125(M,P) M(125,P)
#define BOOST_PREPROCESSOR_REPEAT127(M,P) BOOST_PREPROCESSOR_REPEAT126(M,P) M(126,P)
#define BOOST_PREPROCESSOR_REPEAT128(M,P) BOOST_PREPROCESSOR_REPEAT127(M,P) M(127,P)
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,155 @@
#ifndef BOOST_PREPROCESSOR_REPEAT_2ND_HPP
#define BOOST_PREPROCESSOR_REPEAT_2ND_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/repeat_2nd.hpp">Click here to see the header.</a>
*/
//! Same as BOOST_PREPROCESSOR_REPEAT(), but implemented independently.
#define BOOST_PREPROCESSOR_REPEAT_2ND(N,M,P) BOOST_PREPROCESSOR_REPEAT_2ND_DELAY(N,M,P)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_REPEAT_2ND_DELAY(N,M,P) BOOST_PREPROCESSOR_REPEAT_2ND##N(M,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND0(M,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND1(M,P) M(0,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND2(M,P) M(0,P) M(1,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND3(M,P) BOOST_PREPROCESSOR_REPEAT_2ND2(M,P) M(2,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND4(M,P) BOOST_PREPROCESSOR_REPEAT_2ND3(M,P) M(3,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND5(M,P) BOOST_PREPROCESSOR_REPEAT_2ND4(M,P) M(4,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND6(M,P) BOOST_PREPROCESSOR_REPEAT_2ND5(M,P) M(5,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND7(M,P) BOOST_PREPROCESSOR_REPEAT_2ND6(M,P) M(6,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND8(M,P) BOOST_PREPROCESSOR_REPEAT_2ND7(M,P) M(7,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND9(M,P) BOOST_PREPROCESSOR_REPEAT_2ND8(M,P) M(8,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND10(M,P) BOOST_PREPROCESSOR_REPEAT_2ND9(M,P) M(9,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND11(M,P) BOOST_PREPROCESSOR_REPEAT_2ND10(M,P) M(10,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND12(M,P) BOOST_PREPROCESSOR_REPEAT_2ND11(M,P) M(11,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND13(M,P) BOOST_PREPROCESSOR_REPEAT_2ND12(M,P) M(12,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND14(M,P) BOOST_PREPROCESSOR_REPEAT_2ND13(M,P) M(13,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND15(M,P) BOOST_PREPROCESSOR_REPEAT_2ND14(M,P) M(14,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND16(M,P) BOOST_PREPROCESSOR_REPEAT_2ND15(M,P) M(15,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND17(M,P) BOOST_PREPROCESSOR_REPEAT_2ND16(M,P) M(16,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND18(M,P) BOOST_PREPROCESSOR_REPEAT_2ND17(M,P) M(17,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND19(M,P) BOOST_PREPROCESSOR_REPEAT_2ND18(M,P) M(18,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND20(M,P) BOOST_PREPROCESSOR_REPEAT_2ND19(M,P) M(19,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND21(M,P) BOOST_PREPROCESSOR_REPEAT_2ND20(M,P) M(20,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND22(M,P) BOOST_PREPROCESSOR_REPEAT_2ND21(M,P) M(21,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND23(M,P) BOOST_PREPROCESSOR_REPEAT_2ND22(M,P) M(22,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND24(M,P) BOOST_PREPROCESSOR_REPEAT_2ND23(M,P) M(23,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND25(M,P) BOOST_PREPROCESSOR_REPEAT_2ND24(M,P) M(24,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND26(M,P) BOOST_PREPROCESSOR_REPEAT_2ND25(M,P) M(25,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND27(M,P) BOOST_PREPROCESSOR_REPEAT_2ND26(M,P) M(26,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND28(M,P) BOOST_PREPROCESSOR_REPEAT_2ND27(M,P) M(27,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND29(M,P) BOOST_PREPROCESSOR_REPEAT_2ND28(M,P) M(28,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND30(M,P) BOOST_PREPROCESSOR_REPEAT_2ND29(M,P) M(29,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND31(M,P) BOOST_PREPROCESSOR_REPEAT_2ND30(M,P) M(30,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND32(M,P) BOOST_PREPROCESSOR_REPEAT_2ND31(M,P) M(31,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND33(M,P) BOOST_PREPROCESSOR_REPEAT_2ND32(M,P) M(32,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND34(M,P) BOOST_PREPROCESSOR_REPEAT_2ND33(M,P) M(33,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND35(M,P) BOOST_PREPROCESSOR_REPEAT_2ND34(M,P) M(34,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND36(M,P) BOOST_PREPROCESSOR_REPEAT_2ND35(M,P) M(35,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND37(M,P) BOOST_PREPROCESSOR_REPEAT_2ND36(M,P) M(36,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND38(M,P) BOOST_PREPROCESSOR_REPEAT_2ND37(M,P) M(37,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND39(M,P) BOOST_PREPROCESSOR_REPEAT_2ND38(M,P) M(38,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND40(M,P) BOOST_PREPROCESSOR_REPEAT_2ND39(M,P) M(39,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND41(M,P) BOOST_PREPROCESSOR_REPEAT_2ND40(M,P) M(40,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND42(M,P) BOOST_PREPROCESSOR_REPEAT_2ND41(M,P) M(41,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND43(M,P) BOOST_PREPROCESSOR_REPEAT_2ND42(M,P) M(42,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND44(M,P) BOOST_PREPROCESSOR_REPEAT_2ND43(M,P) M(43,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND45(M,P) BOOST_PREPROCESSOR_REPEAT_2ND44(M,P) M(44,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND46(M,P) BOOST_PREPROCESSOR_REPEAT_2ND45(M,P) M(45,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND47(M,P) BOOST_PREPROCESSOR_REPEAT_2ND46(M,P) M(46,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND48(M,P) BOOST_PREPROCESSOR_REPEAT_2ND47(M,P) M(47,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND49(M,P) BOOST_PREPROCESSOR_REPEAT_2ND48(M,P) M(48,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND50(M,P) BOOST_PREPROCESSOR_REPEAT_2ND49(M,P) M(49,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND51(M,P) BOOST_PREPROCESSOR_REPEAT_2ND50(M,P) M(50,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND52(M,P) BOOST_PREPROCESSOR_REPEAT_2ND51(M,P) M(51,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND53(M,P) BOOST_PREPROCESSOR_REPEAT_2ND52(M,P) M(52,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND54(M,P) BOOST_PREPROCESSOR_REPEAT_2ND53(M,P) M(53,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND55(M,P) BOOST_PREPROCESSOR_REPEAT_2ND54(M,P) M(54,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND56(M,P) BOOST_PREPROCESSOR_REPEAT_2ND55(M,P) M(55,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND57(M,P) BOOST_PREPROCESSOR_REPEAT_2ND56(M,P) M(56,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND58(M,P) BOOST_PREPROCESSOR_REPEAT_2ND57(M,P) M(57,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND59(M,P) BOOST_PREPROCESSOR_REPEAT_2ND58(M,P) M(58,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND60(M,P) BOOST_PREPROCESSOR_REPEAT_2ND59(M,P) M(59,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND61(M,P) BOOST_PREPROCESSOR_REPEAT_2ND60(M,P) M(60,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND62(M,P) BOOST_PREPROCESSOR_REPEAT_2ND61(M,P) M(61,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND63(M,P) BOOST_PREPROCESSOR_REPEAT_2ND62(M,P) M(62,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND64(M,P) BOOST_PREPROCESSOR_REPEAT_2ND63(M,P) M(63,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND65(M,P) BOOST_PREPROCESSOR_REPEAT_2ND64(M,P) M(64,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND66(M,P) BOOST_PREPROCESSOR_REPEAT_2ND65(M,P) M(65,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND67(M,P) BOOST_PREPROCESSOR_REPEAT_2ND66(M,P) M(66,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND68(M,P) BOOST_PREPROCESSOR_REPEAT_2ND67(M,P) M(67,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND69(M,P) BOOST_PREPROCESSOR_REPEAT_2ND68(M,P) M(68,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND70(M,P) BOOST_PREPROCESSOR_REPEAT_2ND69(M,P) M(69,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND71(M,P) BOOST_PREPROCESSOR_REPEAT_2ND70(M,P) M(70,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND72(M,P) BOOST_PREPROCESSOR_REPEAT_2ND71(M,P) M(71,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND73(M,P) BOOST_PREPROCESSOR_REPEAT_2ND72(M,P) M(72,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND74(M,P) BOOST_PREPROCESSOR_REPEAT_2ND73(M,P) M(73,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND75(M,P) BOOST_PREPROCESSOR_REPEAT_2ND74(M,P) M(74,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND76(M,P) BOOST_PREPROCESSOR_REPEAT_2ND75(M,P) M(75,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND77(M,P) BOOST_PREPROCESSOR_REPEAT_2ND76(M,P) M(76,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND78(M,P) BOOST_PREPROCESSOR_REPEAT_2ND77(M,P) M(77,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND79(M,P) BOOST_PREPROCESSOR_REPEAT_2ND78(M,P) M(78,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND80(M,P) BOOST_PREPROCESSOR_REPEAT_2ND79(M,P) M(79,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND81(M,P) BOOST_PREPROCESSOR_REPEAT_2ND80(M,P) M(80,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND82(M,P) BOOST_PREPROCESSOR_REPEAT_2ND81(M,P) M(81,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND83(M,P) BOOST_PREPROCESSOR_REPEAT_2ND82(M,P) M(82,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND84(M,P) BOOST_PREPROCESSOR_REPEAT_2ND83(M,P) M(83,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND85(M,P) BOOST_PREPROCESSOR_REPEAT_2ND84(M,P) M(84,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND86(M,P) BOOST_PREPROCESSOR_REPEAT_2ND85(M,P) M(85,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND87(M,P) BOOST_PREPROCESSOR_REPEAT_2ND86(M,P) M(86,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND88(M,P) BOOST_PREPROCESSOR_REPEAT_2ND87(M,P) M(87,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND89(M,P) BOOST_PREPROCESSOR_REPEAT_2ND88(M,P) M(88,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND90(M,P) BOOST_PREPROCESSOR_REPEAT_2ND89(M,P) M(89,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND91(M,P) BOOST_PREPROCESSOR_REPEAT_2ND90(M,P) M(90,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND92(M,P) BOOST_PREPROCESSOR_REPEAT_2ND91(M,P) M(91,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND93(M,P) BOOST_PREPROCESSOR_REPEAT_2ND92(M,P) M(92,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND94(M,P) BOOST_PREPROCESSOR_REPEAT_2ND93(M,P) M(93,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND95(M,P) BOOST_PREPROCESSOR_REPEAT_2ND94(M,P) M(94,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND96(M,P) BOOST_PREPROCESSOR_REPEAT_2ND95(M,P) M(95,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND97(M,P) BOOST_PREPROCESSOR_REPEAT_2ND96(M,P) M(96,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND98(M,P) BOOST_PREPROCESSOR_REPEAT_2ND97(M,P) M(97,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND99(M,P) BOOST_PREPROCESSOR_REPEAT_2ND98(M,P) M(98,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND100(M,P) BOOST_PREPROCESSOR_REPEAT_2ND99(M,P) M(99,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND101(M,P) BOOST_PREPROCESSOR_REPEAT_2ND100(M,P) M(100,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND102(M,P) BOOST_PREPROCESSOR_REPEAT_2ND101(M,P) M(101,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND103(M,P) BOOST_PREPROCESSOR_REPEAT_2ND102(M,P) M(102,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND104(M,P) BOOST_PREPROCESSOR_REPEAT_2ND103(M,P) M(103,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND105(M,P) BOOST_PREPROCESSOR_REPEAT_2ND104(M,P) M(104,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND106(M,P) BOOST_PREPROCESSOR_REPEAT_2ND105(M,P) M(105,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND107(M,P) BOOST_PREPROCESSOR_REPEAT_2ND106(M,P) M(106,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND108(M,P) BOOST_PREPROCESSOR_REPEAT_2ND107(M,P) M(107,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND109(M,P) BOOST_PREPROCESSOR_REPEAT_2ND108(M,P) M(108,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND110(M,P) BOOST_PREPROCESSOR_REPEAT_2ND109(M,P) M(109,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND111(M,P) BOOST_PREPROCESSOR_REPEAT_2ND110(M,P) M(110,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND112(M,P) BOOST_PREPROCESSOR_REPEAT_2ND111(M,P) M(111,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND113(M,P) BOOST_PREPROCESSOR_REPEAT_2ND112(M,P) M(112,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND114(M,P) BOOST_PREPROCESSOR_REPEAT_2ND113(M,P) M(113,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND115(M,P) BOOST_PREPROCESSOR_REPEAT_2ND114(M,P) M(114,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND116(M,P) BOOST_PREPROCESSOR_REPEAT_2ND115(M,P) M(115,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND117(M,P) BOOST_PREPROCESSOR_REPEAT_2ND116(M,P) M(116,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND118(M,P) BOOST_PREPROCESSOR_REPEAT_2ND117(M,P) M(117,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND119(M,P) BOOST_PREPROCESSOR_REPEAT_2ND118(M,P) M(118,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND120(M,P) BOOST_PREPROCESSOR_REPEAT_2ND119(M,P) M(119,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND121(M,P) BOOST_PREPROCESSOR_REPEAT_2ND120(M,P) M(120,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND122(M,P) BOOST_PREPROCESSOR_REPEAT_2ND121(M,P) M(121,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND123(M,P) BOOST_PREPROCESSOR_REPEAT_2ND122(M,P) M(122,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND124(M,P) BOOST_PREPROCESSOR_REPEAT_2ND123(M,P) M(123,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND125(M,P) BOOST_PREPROCESSOR_REPEAT_2ND124(M,P) M(124,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND126(M,P) BOOST_PREPROCESSOR_REPEAT_2ND125(M,P) M(125,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND127(M,P) BOOST_PREPROCESSOR_REPEAT_2ND126(M,P) M(126,P)
#define BOOST_PREPROCESSOR_REPEAT_2ND128(M,P) BOOST_PREPROCESSOR_REPEAT_2ND127(M,P) M(127,P)
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,155 @@
#ifndef BOOST_PREPROCESSOR_REPEAT_3RD_HPP
#define BOOST_PREPROCESSOR_REPEAT_3RD_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/repeat_3rd.hpp">Click here to see the header.</a>
*/
//! Same as BOOST_PREPROCESSOR_REPEAT(), but implemented independently.
#define BOOST_PREPROCESSOR_REPEAT_3RD(N,M,P) BOOST_PREPROCESSOR_REPEAT_3RD_DELAY(N,M,P)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_REPEAT_3RD_DELAY(N,M,P) BOOST_PREPROCESSOR_REPEAT_3RD##N(M,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD0(M,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD1(M,P) M(0,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD2(M,P) M(0,P) M(1,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD3(M,P) BOOST_PREPROCESSOR_REPEAT_3RD2(M,P) M(2,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD4(M,P) BOOST_PREPROCESSOR_REPEAT_3RD3(M,P) M(3,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD5(M,P) BOOST_PREPROCESSOR_REPEAT_3RD4(M,P) M(4,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD6(M,P) BOOST_PREPROCESSOR_REPEAT_3RD5(M,P) M(5,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD7(M,P) BOOST_PREPROCESSOR_REPEAT_3RD6(M,P) M(6,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD8(M,P) BOOST_PREPROCESSOR_REPEAT_3RD7(M,P) M(7,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD9(M,P) BOOST_PREPROCESSOR_REPEAT_3RD8(M,P) M(8,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD10(M,P) BOOST_PREPROCESSOR_REPEAT_3RD9(M,P) M(9,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD11(M,P) BOOST_PREPROCESSOR_REPEAT_3RD10(M,P) M(10,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD12(M,P) BOOST_PREPROCESSOR_REPEAT_3RD11(M,P) M(11,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD13(M,P) BOOST_PREPROCESSOR_REPEAT_3RD12(M,P) M(12,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD14(M,P) BOOST_PREPROCESSOR_REPEAT_3RD13(M,P) M(13,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD15(M,P) BOOST_PREPROCESSOR_REPEAT_3RD14(M,P) M(14,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD16(M,P) BOOST_PREPROCESSOR_REPEAT_3RD15(M,P) M(15,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD17(M,P) BOOST_PREPROCESSOR_REPEAT_3RD16(M,P) M(16,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD18(M,P) BOOST_PREPROCESSOR_REPEAT_3RD17(M,P) M(17,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD19(M,P) BOOST_PREPROCESSOR_REPEAT_3RD18(M,P) M(18,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD20(M,P) BOOST_PREPROCESSOR_REPEAT_3RD19(M,P) M(19,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD21(M,P) BOOST_PREPROCESSOR_REPEAT_3RD20(M,P) M(20,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD22(M,P) BOOST_PREPROCESSOR_REPEAT_3RD21(M,P) M(21,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD23(M,P) BOOST_PREPROCESSOR_REPEAT_3RD22(M,P) M(22,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD24(M,P) BOOST_PREPROCESSOR_REPEAT_3RD23(M,P) M(23,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD25(M,P) BOOST_PREPROCESSOR_REPEAT_3RD24(M,P) M(24,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD26(M,P) BOOST_PREPROCESSOR_REPEAT_3RD25(M,P) M(25,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD27(M,P) BOOST_PREPROCESSOR_REPEAT_3RD26(M,P) M(26,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD28(M,P) BOOST_PREPROCESSOR_REPEAT_3RD27(M,P) M(27,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD29(M,P) BOOST_PREPROCESSOR_REPEAT_3RD28(M,P) M(28,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD30(M,P) BOOST_PREPROCESSOR_REPEAT_3RD29(M,P) M(29,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD31(M,P) BOOST_PREPROCESSOR_REPEAT_3RD30(M,P) M(30,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD32(M,P) BOOST_PREPROCESSOR_REPEAT_3RD31(M,P) M(31,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD33(M,P) BOOST_PREPROCESSOR_REPEAT_3RD32(M,P) M(32,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD34(M,P) BOOST_PREPROCESSOR_REPEAT_3RD33(M,P) M(33,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD35(M,P) BOOST_PREPROCESSOR_REPEAT_3RD34(M,P) M(34,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD36(M,P) BOOST_PREPROCESSOR_REPEAT_3RD35(M,P) M(35,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD37(M,P) BOOST_PREPROCESSOR_REPEAT_3RD36(M,P) M(36,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD38(M,P) BOOST_PREPROCESSOR_REPEAT_3RD37(M,P) M(37,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD39(M,P) BOOST_PREPROCESSOR_REPEAT_3RD38(M,P) M(38,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD40(M,P) BOOST_PREPROCESSOR_REPEAT_3RD39(M,P) M(39,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD41(M,P) BOOST_PREPROCESSOR_REPEAT_3RD40(M,P) M(40,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD42(M,P) BOOST_PREPROCESSOR_REPEAT_3RD41(M,P) M(41,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD43(M,P) BOOST_PREPROCESSOR_REPEAT_3RD42(M,P) M(42,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD44(M,P) BOOST_PREPROCESSOR_REPEAT_3RD43(M,P) M(43,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD45(M,P) BOOST_PREPROCESSOR_REPEAT_3RD44(M,P) M(44,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD46(M,P) BOOST_PREPROCESSOR_REPEAT_3RD45(M,P) M(45,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD47(M,P) BOOST_PREPROCESSOR_REPEAT_3RD46(M,P) M(46,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD48(M,P) BOOST_PREPROCESSOR_REPEAT_3RD47(M,P) M(47,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD49(M,P) BOOST_PREPROCESSOR_REPEAT_3RD48(M,P) M(48,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD50(M,P) BOOST_PREPROCESSOR_REPEAT_3RD49(M,P) M(49,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD51(M,P) BOOST_PREPROCESSOR_REPEAT_3RD50(M,P) M(50,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD52(M,P) BOOST_PREPROCESSOR_REPEAT_3RD51(M,P) M(51,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD53(M,P) BOOST_PREPROCESSOR_REPEAT_3RD52(M,P) M(52,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD54(M,P) BOOST_PREPROCESSOR_REPEAT_3RD53(M,P) M(53,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD55(M,P) BOOST_PREPROCESSOR_REPEAT_3RD54(M,P) M(54,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD56(M,P) BOOST_PREPROCESSOR_REPEAT_3RD55(M,P) M(55,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD57(M,P) BOOST_PREPROCESSOR_REPEAT_3RD56(M,P) M(56,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD58(M,P) BOOST_PREPROCESSOR_REPEAT_3RD57(M,P) M(57,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD59(M,P) BOOST_PREPROCESSOR_REPEAT_3RD58(M,P) M(58,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD60(M,P) BOOST_PREPROCESSOR_REPEAT_3RD59(M,P) M(59,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD61(M,P) BOOST_PREPROCESSOR_REPEAT_3RD60(M,P) M(60,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD62(M,P) BOOST_PREPROCESSOR_REPEAT_3RD61(M,P) M(61,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD63(M,P) BOOST_PREPROCESSOR_REPEAT_3RD62(M,P) M(62,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD64(M,P) BOOST_PREPROCESSOR_REPEAT_3RD63(M,P) M(63,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD65(M,P) BOOST_PREPROCESSOR_REPEAT_3RD64(M,P) M(64,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD66(M,P) BOOST_PREPROCESSOR_REPEAT_3RD65(M,P) M(65,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD67(M,P) BOOST_PREPROCESSOR_REPEAT_3RD66(M,P) M(66,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD68(M,P) BOOST_PREPROCESSOR_REPEAT_3RD67(M,P) M(67,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD69(M,P) BOOST_PREPROCESSOR_REPEAT_3RD68(M,P) M(68,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD70(M,P) BOOST_PREPROCESSOR_REPEAT_3RD69(M,P) M(69,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD71(M,P) BOOST_PREPROCESSOR_REPEAT_3RD70(M,P) M(70,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD72(M,P) BOOST_PREPROCESSOR_REPEAT_3RD71(M,P) M(71,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD73(M,P) BOOST_PREPROCESSOR_REPEAT_3RD72(M,P) M(72,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD74(M,P) BOOST_PREPROCESSOR_REPEAT_3RD73(M,P) M(73,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD75(M,P) BOOST_PREPROCESSOR_REPEAT_3RD74(M,P) M(74,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD76(M,P) BOOST_PREPROCESSOR_REPEAT_3RD75(M,P) M(75,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD77(M,P) BOOST_PREPROCESSOR_REPEAT_3RD76(M,P) M(76,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD78(M,P) BOOST_PREPROCESSOR_REPEAT_3RD77(M,P) M(77,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD79(M,P) BOOST_PREPROCESSOR_REPEAT_3RD78(M,P) M(78,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD80(M,P) BOOST_PREPROCESSOR_REPEAT_3RD79(M,P) M(79,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD81(M,P) BOOST_PREPROCESSOR_REPEAT_3RD80(M,P) M(80,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD82(M,P) BOOST_PREPROCESSOR_REPEAT_3RD81(M,P) M(81,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD83(M,P) BOOST_PREPROCESSOR_REPEAT_3RD82(M,P) M(82,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD84(M,P) BOOST_PREPROCESSOR_REPEAT_3RD83(M,P) M(83,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD85(M,P) BOOST_PREPROCESSOR_REPEAT_3RD84(M,P) M(84,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD86(M,P) BOOST_PREPROCESSOR_REPEAT_3RD85(M,P) M(85,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD87(M,P) BOOST_PREPROCESSOR_REPEAT_3RD86(M,P) M(86,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD88(M,P) BOOST_PREPROCESSOR_REPEAT_3RD87(M,P) M(87,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD89(M,P) BOOST_PREPROCESSOR_REPEAT_3RD88(M,P) M(88,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD90(M,P) BOOST_PREPROCESSOR_REPEAT_3RD89(M,P) M(89,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD91(M,P) BOOST_PREPROCESSOR_REPEAT_3RD90(M,P) M(90,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD92(M,P) BOOST_PREPROCESSOR_REPEAT_3RD91(M,P) M(91,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD93(M,P) BOOST_PREPROCESSOR_REPEAT_3RD92(M,P) M(92,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD94(M,P) BOOST_PREPROCESSOR_REPEAT_3RD93(M,P) M(93,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD95(M,P) BOOST_PREPROCESSOR_REPEAT_3RD94(M,P) M(94,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD96(M,P) BOOST_PREPROCESSOR_REPEAT_3RD95(M,P) M(95,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD97(M,P) BOOST_PREPROCESSOR_REPEAT_3RD96(M,P) M(96,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD98(M,P) BOOST_PREPROCESSOR_REPEAT_3RD97(M,P) M(97,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD99(M,P) BOOST_PREPROCESSOR_REPEAT_3RD98(M,P) M(98,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD100(M,P) BOOST_PREPROCESSOR_REPEAT_3RD99(M,P) M(99,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD101(M,P) BOOST_PREPROCESSOR_REPEAT_3RD100(M,P) M(100,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD102(M,P) BOOST_PREPROCESSOR_REPEAT_3RD101(M,P) M(101,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD103(M,P) BOOST_PREPROCESSOR_REPEAT_3RD102(M,P) M(102,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD104(M,P) BOOST_PREPROCESSOR_REPEAT_3RD103(M,P) M(103,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD105(M,P) BOOST_PREPROCESSOR_REPEAT_3RD104(M,P) M(104,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD106(M,P) BOOST_PREPROCESSOR_REPEAT_3RD105(M,P) M(105,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD107(M,P) BOOST_PREPROCESSOR_REPEAT_3RD106(M,P) M(106,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD108(M,P) BOOST_PREPROCESSOR_REPEAT_3RD107(M,P) M(107,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD109(M,P) BOOST_PREPROCESSOR_REPEAT_3RD108(M,P) M(108,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD110(M,P) BOOST_PREPROCESSOR_REPEAT_3RD109(M,P) M(109,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD111(M,P) BOOST_PREPROCESSOR_REPEAT_3RD110(M,P) M(110,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD112(M,P) BOOST_PREPROCESSOR_REPEAT_3RD111(M,P) M(111,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD113(M,P) BOOST_PREPROCESSOR_REPEAT_3RD112(M,P) M(112,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD114(M,P) BOOST_PREPROCESSOR_REPEAT_3RD113(M,P) M(113,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD115(M,P) BOOST_PREPROCESSOR_REPEAT_3RD114(M,P) M(114,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD116(M,P) BOOST_PREPROCESSOR_REPEAT_3RD115(M,P) M(115,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD117(M,P) BOOST_PREPROCESSOR_REPEAT_3RD116(M,P) M(116,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD118(M,P) BOOST_PREPROCESSOR_REPEAT_3RD117(M,P) M(117,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD119(M,P) BOOST_PREPROCESSOR_REPEAT_3RD118(M,P) M(118,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD120(M,P) BOOST_PREPROCESSOR_REPEAT_3RD119(M,P) M(119,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD121(M,P) BOOST_PREPROCESSOR_REPEAT_3RD120(M,P) M(120,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD122(M,P) BOOST_PREPROCESSOR_REPEAT_3RD121(M,P) M(121,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD123(M,P) BOOST_PREPROCESSOR_REPEAT_3RD122(M,P) M(122,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD124(M,P) BOOST_PREPROCESSOR_REPEAT_3RD123(M,P) M(123,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD125(M,P) BOOST_PREPROCESSOR_REPEAT_3RD124(M,P) M(124,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD126(M,P) BOOST_PREPROCESSOR_REPEAT_3RD125(M,P) M(125,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD127(M,P) BOOST_PREPROCESSOR_REPEAT_3RD126(M,P) M(126,P)
#define BOOST_PREPROCESSOR_REPEAT_3RD128(M,P) BOOST_PREPROCESSOR_REPEAT_3RD127(M,P) M(127,P)
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,52 @@
#ifndef BOOST_PREPROCESSOR_STRINGIZE_HPP
#define BOOST_PREPROCESSOR_STRINGIZE_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/stringize.hpp">Click here to see the header.</a>
*/
//! Delays the stringization of E.
/*!
Example:
<PRE>\verbatim
#define NOTE(STR)\
message(__FILE__ "(" BOOST_PREPROCESSOR_STRINGIZE(__LINE__) ") : " STR)
// ...
#pragma NOTE("TBD!")
\endverbatim</PRE>
The above expands to:
<PRE>\verbatim
#pragma message("examples.cpp" "(" "20" ") : " "TBD!")
\endverbatim</PRE>
The use of BOOST_PREPROCESSOR_STRINGIZE() above lets the preprocessor expand
the __LINE__ before stringizing it. If # would be used directly, the code
would expand to:
<PRE>\verbatim
#pragma message("examples.cpp" "(" "__LINE__" ") : " "TBD!")
\endverbatim</PRE>
*/
#define BOOST_PREPROCESSOR_STRINGIZE(E) BOOST_PREPROCESSOR_STRINGIZE_DELAY(E)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_STRINGIZE_DELAY(E) #E
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,95 @@
#ifndef BOOST_PREPROCESSOR_TUPLE_HPP
#define BOOST_PREPROCESSOR_TUPLE_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/tuple.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_IDENTITY_HPP
# include <boost/preprocessor/identity.hpp>
#endif
//! Expands to the I:th element of an N-tuple.
/*!
Examples of tuples:
<PRE>\verbatim
2-tuple: (A, B)
3-tuple: (1, 2, 3)
4-tuple: (A B C, D, EF, 34)
\endverbatim</PRE>
Example:
<PRE>\verbatim
BOOST_PREPROCESSOR_TUPLE_ELEM(2,1,(A,B))
\endverbatim</PRE>
The above expands to:
<PRE>\verbatim
B
\endverbatim</PRE>
*/
#define BOOST_PREPROCESSOR_TUPLE_ELEM(N,I,T) BOOST_PREPROCESSOR_TUPLE_ELEM_DELAY(N,I,T)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_TUPLE_ELEM_DELAY(N,I,T) BOOST_PREPROCESSOR_IDENTITY(BOOST_PREPROCESSOR_TUPLE##N##_ELEM##I T)()
#define BOOST_PREPROCESSOR_TUPLE1_ELEM0(E0) E0
#define BOOST_PREPROCESSOR_TUPLE2_ELEM0(E0,E1) E0
#define BOOST_PREPROCESSOR_TUPLE2_ELEM1(E0,E1) E1
#define BOOST_PREPROCESSOR_TUPLE3_ELEM0(E0,E1,E2) E0
#define BOOST_PREPROCESSOR_TUPLE3_ELEM1(E0,E1,E2) E1
#define BOOST_PREPROCESSOR_TUPLE3_ELEM2(E0,E1,E2) E2
#define BOOST_PREPROCESSOR_TUPLE4_ELEM0(E0,E1,E2,E3) E0
#define BOOST_PREPROCESSOR_TUPLE4_ELEM1(E0,E1,E2,E3) E1
#define BOOST_PREPROCESSOR_TUPLE4_ELEM2(E0,E1,E2,E3) E2
#define BOOST_PREPROCESSOR_TUPLE4_ELEM3(E0,E1,E2,E3) E3
#define BOOST_PREPROCESSOR_TUPLE5_ELEM0(E0,E1,E2,E3,E4) E0
#define BOOST_PREPROCESSOR_TUPLE5_ELEM1(E0,E1,E2,E3,E4) E1
#define BOOST_PREPROCESSOR_TUPLE5_ELEM2(E0,E1,E2,E3,E4) E2
#define BOOST_PREPROCESSOR_TUPLE5_ELEM3(E0,E1,E2,E3,E4) E3
#define BOOST_PREPROCESSOR_TUPLE5_ELEM4(E0,E1,E2,E3,E4) E4
#define BOOST_PREPROCESSOR_TUPLE6_ELEM0(E0,E1,E2,E3,E4,E5) E0
#define BOOST_PREPROCESSOR_TUPLE6_ELEM1(E0,E1,E2,E3,E4,E5) E1
#define BOOST_PREPROCESSOR_TUPLE6_ELEM2(E0,E1,E2,E3,E4,E5) E2
#define BOOST_PREPROCESSOR_TUPLE6_ELEM3(E0,E1,E2,E3,E4,E5) E3
#define BOOST_PREPROCESSOR_TUPLE6_ELEM4(E0,E1,E2,E3,E4,E5) E4
#define BOOST_PREPROCESSOR_TUPLE6_ELEM5(E0,E1,E2,E3,E4,E5) E5
#define BOOST_PREPROCESSOR_TUPLE7_ELEM0(E0,E1,E2,E3,E4,E5,E6) E0
#define BOOST_PREPROCESSOR_TUPLE7_ELEM1(E0,E1,E2,E3,E4,E5,E6) E1
#define BOOST_PREPROCESSOR_TUPLE7_ELEM2(E0,E1,E2,E3,E4,E5,E6) E2
#define BOOST_PREPROCESSOR_TUPLE7_ELEM3(E0,E1,E2,E3,E4,E5,E6) E3
#define BOOST_PREPROCESSOR_TUPLE7_ELEM4(E0,E1,E2,E3,E4,E5,E6) E4
#define BOOST_PREPROCESSOR_TUPLE7_ELEM5(E0,E1,E2,E3,E4,E5,E6) E5
#define BOOST_PREPROCESSOR_TUPLE7_ELEM6(E0,E1,E2,E3,E4,E5,E6) E6
#define BOOST_PREPROCESSOR_TUPLE8_ELEM0(E0,E1,E2,E3,E4,E5,E6,E7) E0
#define BOOST_PREPROCESSOR_TUPLE8_ELEM1(E0,E1,E2,E3,E4,E5,E6,E7) E1
#define BOOST_PREPROCESSOR_TUPLE8_ELEM2(E0,E1,E2,E3,E4,E5,E6,E7) E2
#define BOOST_PREPROCESSOR_TUPLE8_ELEM3(E0,E1,E2,E3,E4,E5,E6,E7) E3
#define BOOST_PREPROCESSOR_TUPLE8_ELEM4(E0,E1,E2,E3,E4,E5,E6,E7) E4
#define BOOST_PREPROCESSOR_TUPLE8_ELEM5(E0,E1,E2,E3,E4,E5,E6,E7) E5
#define BOOST_PREPROCESSOR_TUPLE8_ELEM6(E0,E1,E2,E3,E4,E5,E6,E7) E6
#define BOOST_PREPROCESSOR_TUPLE8_ELEM7(E0,E1,E2,E3,E4,E5,E6,E7) E7
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

View File

@ -0,0 +1,158 @@
#ifndef BOOST_PREPROCESSOR_WHILE_HPP
#define BOOST_PREPROCESSOR_WHILE_HPP
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
/*! \file
<a href="../../../../boost/preprocessor/while.hpp">Click here to see the header.</a>
*/
#ifndef BOOST_PREPROCESSOR_IF_HPP
# include <boost/preprocessor/if.hpp>
#endif
//! CURRENTLY THIS FEATURE IS FOR INTERNAL USE ONLY!
#define BOOST_PREPROCESSOR_WHILE(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE0,-)(C,F,F(X)),X)
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#define BOOST_PREPROCESSOR_WHILE0(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE1,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE1(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE2,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE2(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE3,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE3(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE4,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE4(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE5,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE5(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE6,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE6(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE7,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE7(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE8,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE8(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE9,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE9(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE10,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE10(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE11,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE11(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE12,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE12(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE13,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE13(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE14,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE14(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE15,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE15(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE16,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE16(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE17,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE17(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE18,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE18(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE19,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE19(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE20,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE20(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE21,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE21(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE22,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE22(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE23,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE23(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE24,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE24(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE25,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE25(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE26,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE26(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE27,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE27(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE28,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE28(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE29,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE29(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE30,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE30(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE31,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE31(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE32,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE32(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE33,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE33(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE34,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE34(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE35,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE35(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE36,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE36(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE37,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE37(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE38,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE38(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE39,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE39(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE40,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE40(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE41,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE41(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE42,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE42(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE43,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE43(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE44,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE44(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE45,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE45(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE46,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE46(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE47,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE47(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE48,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE48(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE49,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE49(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE50,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE50(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE51,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE51(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE52,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE52(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE53,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE53(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE54,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE54(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE55,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE55(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE56,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE56(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE57,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE57(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE58,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE58(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE59,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE59(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE60,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE60(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE61,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE61(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE62,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE62(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE63,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE63(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE64,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE64(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE65,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE65(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE66,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE66(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE67,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE67(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE68,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE68(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE69,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE69(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE70,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE70(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE71,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE71(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE72,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE72(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE73,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE73(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE74,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE74(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE75,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE75(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE76,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE76(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE77,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE77(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE78,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE78(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE79,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE79(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE80,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE80(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE81,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE81(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE82,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE82(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE83,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE83(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE84,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE84(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE85,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE85(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE86,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE86(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE87,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE87(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE88,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE88(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE89,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE89(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE90,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE90(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE91,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE91(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE92,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE92(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE93,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE93(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE94,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE94(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE95,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE95(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE96,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE96(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE97,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE97(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE98,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE98(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE99,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE99(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE100,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE100(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE101,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE101(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE102,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE102(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE103,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE103(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE104,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE104(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE105,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE105(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE106,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE106(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE107,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE107(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE108,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE108(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE109,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE109(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE110,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE110(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE111,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE111(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE112,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE112(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE113,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE113(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE114,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE114(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE115,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE115(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE116,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE116(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE117,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE117(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE118,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE118(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE119,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE119(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE120,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE120(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE121,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE121(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE122,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE122(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE123,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE123(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE124,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE124(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE125,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE125(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE126,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE126(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE127,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE127(C,F,X) BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_IF(C(X),BOOST_PREPROCESSOR_WHILE128,-)(C,F,F(X)),X)
#define BOOST_PREPROCESSOR_WHILE128(C,F,X) RECURSION DEPTH EXCEEDED!
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
#endif

156
test/preprocessor_test.cpp Normal file
View File

@ -0,0 +1,156 @@
// Copyright (C) 2001
// Housemarque, Inc.
// http://www.housemarque.com
//
// Permission to copy, use, modify, sell and distribute this software is
// granted provided this copyright notice appears in all copies. This
// software is provided "as is" without express or implied warranty, and
// with no claim as to its suitability for any purpose.
// See http://www.boost.org for most recent version.
#include <boost/preprocessor.hpp>
// ***
struct Container
{
#define BOOST_PREPROCESSOR_DEF(CV)\
CV int& operator[](int i) CV;
BOOST_PREPROCESSOR_DEF(BOOST_PREPROCESSOR_EMPTY())
BOOST_PREPROCESSOR_DEF(const)
BOOST_PREPROCESSOR_DEF(volatile)
BOOST_PREPROCESSOR_DEF(const volatile)
#undef BOOST_PREPROCESSOR_DEF
};
// ***
int test_logic_1[0+(BOOST_PREPROCESSOR_NOT(0) == 1)];
int test_logic_2[0+(BOOST_PREPROCESSOR_NOT(1) == 0)];
int test_logic_3[0+(BOOST_PREPROCESSOR_AND(0,0) == 0)];
int test_logic_4[0+(BOOST_PREPROCESSOR_AND(0,1) == 0)];
int test_logic_5[0+(BOOST_PREPROCESSOR_AND(1,0) == 0)];
int test_logic_6[0+(BOOST_PREPROCESSOR_AND(1,1) == 1)];
int test_logic_7[0+(BOOST_PREPROCESSOR_OR(0,0) == 0)];
int test_logic_8[0+(BOOST_PREPROCESSOR_OR(0,1) == 1)];
int test_logic_9[0+(BOOST_PREPROCESSOR_OR(1,0) == 1)];
int test_logic_a[0+(BOOST_PREPROCESSOR_OR(1,1) == 1)];
int test_logic_b[0+(BOOST_PREPROCESSOR_XOR(0,0) == 0)];
int test_logic_c[0+(BOOST_PREPROCESSOR_XOR(0,1) == 1)];
int test_logic_d[0+(BOOST_PREPROCESSOR_XOR(1,0) == 1)];
int test_logic_e[0+(BOOST_PREPROCESSOR_XOR(1,1) == 0)];
// ***
static int if_test[
0+(BOOST_PREPROCESSOR_IF(BOOST_PREPROCESSOR_INC(0),true,false) &&
BOOST_PREPROCESSOR_IF(BOOST_PREPROCESSOR_DEC(1),false,true))];
// ***
static int cat_test[
0+(BOOST_PREPROCESSOR_CAT(BOOST_PREPROCESSOR_IF(1,tru,fals), e))];
// ***
static const char stringize_test[4] = BOOST_PREPROCESSOR_STRINGIZE(__LINE__);
// ***
// RATIONALE:
// - All forms of ENUM_PARAMS must be tested with 0 and n, where n is
// sufficiently large to exceed imaginable usage like. 50 should be
// suffient in this case.
#ifndef ENUM_PARAMS_TEST_MAX
#define ENUM_PARAMS_TEST_MAX 50
#endif
#define CONSTANT(I,A) const A##I = I;
BOOST_PREPROCESSOR_REPEAT(ENUM_PARAMS_TEST_MAX, CONSTANT, int default_param_)
#undef CONSTANT
#define TEST_ENUM_PARAMS(N)\
void BOOST_PREPROCESSOR_CAT(test_enum_params,N)(\
BOOST_PREPROCESSOR_ENUM_PARAMS(N, double x));\
void BOOST_PREPROCESSOR_CAT(test_enum_params_with_a_default,N)(\
BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_A_DEFAULT(N, double x, 0));\
void BOOST_PREPROCESSOR_CAT(test_enum_params_with_defaults,N)(\
BOOST_PREPROCESSOR_ENUM_PARAMS_WITH_DEFAULTS(N, double x, default_param_));
TEST_ENUM_PARAMS(0)
TEST_ENUM_PARAMS(ENUM_PARAMS_TEST_MAX)
#undef TEST_ENUM_PARAMS
// ***
#ifndef IS_FUNCTION_HELPER_TEST_MAX
#define IS_FUNCTION_HELPER_TEST_MAX 40
#endif
typedef char yes_type;
#define IS_FUNCTION_HELPER(I,A)\
template\
<BOOST_PREPROCESSOR_ENUM_PARAMS(BOOST_PREPROCESSOR_INC(I),class P)>\
yes_type is_function_helper(\
P0 (*)(BOOST_PREPROCESSOR_ENUM_SHIFTED_PARAMS(BOOST_PREPROCESSOR_INC(I),P)));
BOOST_PREPROCESSOR_REPEAT_2ND(BOOST_PREPROCESSOR_INC(IS_FUNCTION_HELPER_TEST_MAX),IS_FUNCTION_HELPER,A)
#undef IS_FUNCTION_HELPER
// ***
int test_arithmetic_1[0+(BOOST_PREPROCESSOR_ADD(5,10)==15)];
int test_arithmetic_2[0+(BOOST_PREPROCESSOR_ADD(0,10)==10)];
int test_arithmetic_3[0+(BOOST_PREPROCESSOR_ADD(1,BOOST_PREPROCESSOR_LIMIT_MAG)==BOOST_PREPROCESSOR_LIMIT_MAG)];
int test_arithmetic_4[0+(BOOST_PREPROCESSOR_SUB(11,0)==11)];
int test_arithmetic_5[0+(BOOST_PREPROCESSOR_SUB(12,1)==11)];
int test_arithmetic_6[0+(BOOST_PREPROCESSOR_SUB(3,4)==0)];
int test_arithmetic_7[0+(BOOST_PREPROCESSOR_MUL(0,1)==0)];
int test_arithmetic_8[0+(BOOST_PREPROCESSOR_MUL(1,0)==0)];
int test_arithmetic_9[0+(BOOST_PREPROCESSOR_MUL(1,1)==1)];
int test_arithmetic_10[0+(BOOST_PREPROCESSOR_MUL(11,5)==55)];
int test_arithmetic_11[0+(BOOST_PREPROCESSOR_DIV(2,1)==2)];
int test_arithmetic_12[0+(BOOST_PREPROCESSOR_DIV(0,5)==0)];
int test_arithmetic_13[0+(BOOST_PREPROCESSOR_DIV(11,3)==3)];
int test_arithmetic_14[0+(BOOST_PREPROCESSOR_DIV(67,30)==2)];
int test_arithmetic_15[0+(BOOST_PREPROCESSOR_EQUAL(1,0)==0)];
int test_arithmetic_16[0+(BOOST_PREPROCESSOR_EQUAL(100,100)==1)];
int test_arithmetic_17[0+(BOOST_PREPROCESSOR_NOT_EQUAL(34,45)==1)];
int test_arithmetic_18[0+(BOOST_PREPROCESSOR_NOT_EQUAL(67,67)==0)];
int test_arithmetic_19[0+(BOOST_PREPROCESSOR_LESS_EQUAL(6,7)==1)];
int test_arithmetic_20[0+(BOOST_PREPROCESSOR_LESS_EQUAL(87,12)==0)];
int test_arithmetic_21[0+(BOOST_PREPROCESSOR_LESS_EQUAL(58,58)==1)];
int test_arithmetic_22[0+(BOOST_PREPROCESSOR_GREATER_EQUAL(6,7)==0)];
int test_arithmetic_23[0+(BOOST_PREPROCESSOR_GREATER_EQUAL(10,10)==1)];
int test_arithmetic_24[0+(BOOST_PREPROCESSOR_GREATER_EQUAL(87,12)==1)];
int test_arithmetic_25[0+(BOOST_PREPROCESSOR_LESS(2,1)==0)];
int test_arithmetic_26[0+(BOOST_PREPROCESSOR_LESS(1,1)==0)];
int test_arithmetic_27[0+(BOOST_PREPROCESSOR_LESS(1,2)==1)];
int test_arithmetic_28[0+(BOOST_PREPROCESSOR_GREATER(2,1)==1)];
int test_arithmetic_29[0+(BOOST_PREPROCESSOR_GREATER(1,1)==0)];
int test_arithmetic_30[0+(BOOST_PREPROCESSOR_GREATER(1,2)==0)];
int test_arithmetic_31[0+(BOOST_PREPROCESSOR_MIN(1,0)==0)];
int test_arithmetic_32[0+(BOOST_PREPROCESSOR_MIN(1,2)==1)];
int test_arithmetic_33[0+(BOOST_PREPROCESSOR_MAX(3,2)==3)];
int test_arithmetic_34[0+(BOOST_PREPROCESSOR_MAX(4,5)==5)];
// ***
int
main()
{ return 0;
}