mirror of
https://github.com/boostorg/function.git
synced 2025-07-01 23:11:05 +02:00
Compare commits
1 Commits
boost-1.26
...
boost-1.25
Author | SHA1 | Date | |
---|---|---|---|
9d940f27df |
@ -34,11 +34,14 @@ void g() { return f(); }
|
||||
<h2>Q: Why (function) cloning? </h2>
|
||||
<p> In November and December of 2000, the issue of cloning vs. reference counting was debated at length and it was decided that cloning gave more predictable semantics. I won't rehash the discussion here, but if it cloning is incorrect for a particular application a reference-counting allocator could be used.
|
||||
|
||||
<h2>Q: How do I assign from a member function?</h2>
|
||||
<p> Member function assignments are not included directly in <code>boost::function</code> because they do not conform to the syntax of function objects. Several libraries exist to wrap member functions in a function object and/or bind the first argument to the member function (the <code>this</code> pointer). A few libraries are <a href="tutorial.html#member_func">described</a> in the <a href="../index.html">Boost.Function</a> documentation.
|
||||
|
||||
<hr>
|
||||
<address><a href="mailto:gregod@cs.rpi.edu">Doug Gregor</a></address>
|
||||
<!-- Created: Fri Feb 16 09:30:41 EST 2001 -->
|
||||
<!-- hhmts start -->
|
||||
Last modified: Wed Nov 7 15:11:52 EST 2001
|
||||
Last modified: Sat Jul 14 16:00:11 EDT 2001
|
||||
<!-- hhmts end -->
|
||||
</body>
|
||||
</html>
|
@ -15,10 +15,8 @@
|
||||
<b>namespace</b> boost {
|
||||
<b>class</b> <a href="#function_base">function_base</a>
|
||||
{
|
||||
<b>typedef</b> <em>implementation-defined</em> safe_bool;
|
||||
<a href="#empty"><b>bool</b> empty() <b>const</b></a>;
|
||||
<a href="#bool"><b>operator</b> safe_bool() <b>const</b></a>;
|
||||
<a href="#not">safe_bool <b>operator!</b>() <b>const</b></a>;
|
||||
<a href="#bool"><b>operator</b> <b>bool</b>() <b>const</b></a>;
|
||||
};
|
||||
|
||||
// For <i>N</i> in [0, <i>MAX_ARGS</i>]
|
||||
@ -67,8 +65,8 @@
|
||||
<b>typename</b> Policy,
|
||||
<b>typename</b> Mixin,
|
||||
<b>typename</b> Allocator>
|
||||
<b>void</b> <a href="#swap_functionN">swap</a>(<b>const</b> function<em>N</em><Arg1, Arg2, <i>...</i>, Arg<i>N</i>, Policy, Mixin, Allocator><b>&</b>,
|
||||
<b>const</b> function<em>N</em><Arg1, Arg2, <i>...</i>, Arg<i>N</i>, Policy, Mixin, Allocator><b>&</b>);
|
||||
<b>void</b> <a href="#swap_functionN">swap</a>(<b>const</b> function<Arg1, Arg2, <i>...</i>, Arg<i>N</i>, Policy, Mixin, Allocator><b>&</b>,
|
||||
<b>const</b> function<Arg1, Arg2, <i>...</i>, Arg<i>N</i>, Policy, Mixin, Allocator><b>&</b>);
|
||||
|
||||
// For any <i>N</i> in [0, <i>MAX_ARGS</i>]
|
||||
<b>template</b><<b>typename</b> ResultType,
|
||||
@ -107,43 +105,6 @@
|
||||
}
|
||||
</pre>
|
||||
|
||||
<h2>Definitions</h2>
|
||||
<p>
|
||||
<ul>
|
||||
<li><a name="compatible"></a>A function object <code>f</code> is <em>compatible</em> if for the given set of argument types <code>Arg1</code>, <code>Arg2</code>, ..., <code>Arg<em>N</em></code> and a return type <code>ResultType</code>, the appropriate following function is well-formed:
|
||||
<pre>
|
||||
<em>// if ResultType is not <b>void</b></em>
|
||||
ResultType foo(Arg1 arg1, Arg2 arg2, ..., Arg<em>N</em> arg<em>N</em>)
|
||||
{
|
||||
<b>return</b> f(arg1, arg2, ..., arg<em>N</em>);
|
||||
}
|
||||
|
||||
<em>// if ResultType is <b>void</b></em>
|
||||
ResultType foo(Arg1 arg1, Arg2 arg2, ..., Arg<em>N</em> arg<em>N</em>)
|
||||
{
|
||||
f(arg1, arg2, ..., arg<em>N</em>);
|
||||
}
|
||||
</pre>
|
||||
<p> A special provision is made for pointers to member functions. Though they are not function objects, Boost.Function will adapt them internally to function objects. This requires that a pointer to member function of the form <code>R (X::*mf)(Arg1, Arg2, ..., Arg<em>N</em>) <em>cv-quals</em></code> be adapted to a function object with the following function call operator overloads:
|
||||
<pre>
|
||||
R <b>operator</b>()(<em>cv-quals</em> X& x, Arg1 arg1, Arg2 arg2, ..., Arg<em>N</em> arg<em>N</em>) <b>const</b>
|
||||
{
|
||||
<b>return</b> x.*mf(arg1, arg2, ..., arg<em>N</em>);
|
||||
}
|
||||
|
||||
R <b>operator</b>()(<em>cv-quals</em> X* x, Arg1 arg1, Arg2 arg2, ..., Arg<em>N</em> arg<em>N</em>) <b>const</b>
|
||||
{
|
||||
<b>return</b> x->*mf(arg1, arg2, ..., arg<em>N</em>);
|
||||
}
|
||||
|
||||
<b>template</b><<b>typename P</b>>
|
||||
R <b>operator</b>()(<em>cv-quals</em> P& x, Arg1 arg1, Arg2 arg2, ..., Arg<em>N</em> arg<em>N</em>) <b>const</b>
|
||||
{
|
||||
<b>return</b> (*x).*mf(arg1, arg2, ..., arg<em>N</em>);
|
||||
}
|
||||
</pre>
|
||||
</ul>
|
||||
|
||||
<h2><a name="function_base">Class <code>function_base</code></a></h2>
|
||||
<p> Class <code>function_base</code> is the common base class for all Boost.Function objects. Objects of type <code>function_base</code> may not be created directly.
|
||||
|
||||
@ -153,18 +114,10 @@
|
||||
<li><b>Throws</b>: will not throw.</li>
|
||||
</ul>
|
||||
|
||||
<p> <a name="bool"><code><b>operator</b> safe_bool() <b>const</b></code></a>
|
||||
<p> <a name="bool"><code><b>operator</b> <b>bool</b>() <b>const</b></code></a>
|
||||
<ul>
|
||||
<li><b>Returns</b>: <code>safe_bool</code> equivalent of <code>!<a href="#empty">empty</a>()</code></li>
|
||||
<li><b>Returns</b>: <code>!<a href="#empty">empty</a>()</code></li>
|
||||
<li><b>Throws</b>: will not throw.</li>
|
||||
<li><b>Notes</b>: The <code>safe_bool</code> type can be used in contexts where a <b>bool</b> is expected (e.g., an <b>if</b> condition); however, implicit conversions (e.g., to <b>int</b>) that can occur with <b>bool</b> are not allowed, eliminating some sources of user error.
|
||||
</ul>
|
||||
|
||||
<p> <a name="not"><code>safe_bool <b>operator!</b>() <b>const</b></code></a>
|
||||
<ul>
|
||||
<li><b>Returns</b>: <code>safe_bool</code> equivalent of <code><a href="#empty">empty</a>()</code></li>
|
||||
<li><b>Throws</b>: will not throw.</li>
|
||||
<li><b>Notes</b>: See <a href="#bool"><code>safe_bool</code> conversion</a>
|
||||
</ul>
|
||||
|
||||
<h2><a name="functionN">Class template <code>function<i>N</i></code></a></h2>
|
||||
@ -184,7 +137,7 @@
|
||||
|
||||
<p> <a name="functionN_target"><code><b>template</b><<b>typename</b> F> function<i>N</i>(<b>const</b> F<b>&</b> g, <b>const</b> Mixin<b>&</b> = Mixin());</code></a>
|
||||
<ul>
|
||||
<li><b>Requires</b>: <code>g</code> is a <a href="#compatible">compatible</a> function object.</li>
|
||||
<li><b>Requires</b>: <code>g</code> is a compatible function object.</li>
|
||||
<li><b>Effects</b>: Constructs the <code>Mixin</code> subobject from the given mixin.</li>
|
||||
<li><b>Postconditions</b>: <code>f</code> targets a copy of <code>g</code> if <code>g</code> is nonempty, or <code>f.<a href="#empty">empty</a>()</code> if <code>g</code> is empty.</li>
|
||||
<li><b>Rationale</b>: <code>g</code> is a reference-to-<code><b>const</b></code> because it is a portable, efficient, and concise way to accept any function object or function pointer. In the case of a function pointer, the type of <code>g</code> is reference-to-<code><b>const</b></code> pointer-to-function.</li>
|
||||
@ -198,7 +151,7 @@
|
||||
|
||||
<p> <a name="functionN_target_assn"><code><b>template</b><<b>typename</b> F> function<i>N</i><b>&</b> <b>operator</b>=(<b>const</b> F<b>&</b> g);</code></a>
|
||||
<ul>
|
||||
<li><b>Requires</b>: <code>g</code> is a <a href="#compatible">compatible</a> function object.</li>
|
||||
<li><b>Requires</b>: <code>g</code> is a compatible function object.</li>
|
||||
<li><b>Postconditions</b>: <code>f</code> targets a copy of <code>g</code> if <code>g</code> is nonempty, or <code>f.<a href="#empty">empty</a>()</code> if <code>g</code> is empty.</li>
|
||||
<li><b>Returns</b>: <code>*this</code>.</li>
|
||||
<li><b>Rationale</b>: <code>g</code> is a reference-to-<code><b>const</b></code> because it is a portable, efficient, and concise way to accept any function object or function pointer. In the case of a function pointer, the type of <code>g</code> is reference-to-<code><b>const</b></code> pointer-to-function.</li>
|
||||
@ -280,7 +233,7 @@
|
||||
<address><a href="mailto:gregod@cs.rpi.edu">Douglas Gregor</a></address>
|
||||
<!-- Created: Fri Jul 13 10:57:20 EDT 2001 -->
|
||||
<!-- hhmts start -->
|
||||
Last modified: Sun Oct 28 00:40:55 EDT 2001
|
||||
Last modified: Sun Jul 22 01:29:50 EDT 2001
|
||||
<!-- hhmts end -->
|
||||
</body>
|
||||
</html>
|
||||
|
@ -66,22 +66,8 @@ else
|
||||
<h3>Member functions</h3>
|
||||
<a name="member_func">
|
||||
<p> In many systems, callbacks often call to member functions of a particular
|
||||
object. This is often referred to as "argument binding", and is beyond the scope of Boost.Function. The use of member functions directly, however, is supported, so the following code is valid:
|
||||
<pre>
|
||||
struct X {
|
||||
int foo(int);
|
||||
};
|
||||
|
||||
boost::function<int, X*, int> f;
|
||||
f = &X::foo;
|
||||
|
||||
X x;
|
||||
f(&x, 5);
|
||||
</pre>
|
||||
<p> Several libraries exist that support argument binding. Three such libraries are summarized below:
|
||||
object. Handling argument binding is beyond the scope of Boost.Function. However, there are several libraries that perform 'argument binding', including
|
||||
<ul>
|
||||
<li> <a href="../../bind/bind.html">Boost.Bind</a>. This library allows binding of arguments for any function object. It is lightweight and very portable.</li>
|
||||
|
||||
<li> The C++ Standard library. Using <code>std::bind1st</code> and <code>std::mem_fun</code> together one can bind the object of a pointer-to-member function for use with Boost.Function:
|
||||
<pre>
|
||||
struct X {
|
||||
@ -95,6 +81,8 @@ object. This is often referred to as "argument binding", and is beyond the scope
|
||||
f(5); // Call x.foo(5)</pre></li>
|
||||
|
||||
<li><a href="http://lambda.cs.utu.fi/">The Lambda library</a>. This library provides a powerful composition mechanism to construct function objects that uses very natural C++ syntax. Lambda requires a compiler that is reasonably conformant to the C++ standard. Note that it is not a Boost library.</li>
|
||||
|
||||
<li>Peter Dimov's <a href="http://groups.yahoo.com/group/boost/files/bind/bind.hpp">bind</a> library. It has a smaller scope than the Lambda Library but is more tolerant of broken compilers. It is an unreviewed library in development.</li>
|
||||
</ul>
|
||||
|
||||
<h2><a name="family">The <code>function</code> family</a></h2>
|
||||
@ -173,7 +161,7 @@ boost::function2<float, int, int, SynchronizedPolicy, SynchronizedMixin> f
|
||||
<address><a href="mailto:gregod@cs.rpi.edu">Douglas Gregor</a></address>
|
||||
<!-- Created: Fri Jul 13 12:47:11 EDT 2001 -->
|
||||
<!-- hhmts start -->
|
||||
Last modified: Sun Oct 28 00:49:02 EDT 2001
|
||||
Last modified: Fri Jul 13 23:58:17 EDT 2001
|
||||
<!-- hhmts end -->
|
||||
</body>
|
||||
</html>
|
||||
|
@ -459,9 +459,10 @@ namespace boost {
|
||||
function(const Functor& f) : base_type(f) {}
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
template<typename Functor> function(Functor* f) : base_type(f) {}
|
||||
template<typename Functor>
|
||||
function(Functor* f) : base_type(f) {}
|
||||
#endif // __BORLANDC__
|
||||
|
||||
|
||||
function(const self_type& f) : base_type(static_cast<const base_type&>(f)){}
|
||||
|
||||
template<typename Functor>
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Boost.Function library
|
||||
//
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
@ -10,28 +10,50 @@
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#ifndef BOOST_FUNCTION_FUNCTION0_HEADER
|
||||
#define BOOST_FUNCTION_FUNCTION0_HEADER
|
||||
#ifndef BOOST_FUNCTION0_HPP
|
||||
#define BOOST_FUNCTION0_HPP
|
||||
|
||||
#include <boost/function/function_base.hpp>
|
||||
|
||||
#define BOOST_FUNCTION_NUM_ARGS 0
|
||||
#define BOOST_FUNCTION_COMMA
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_PARMS
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_ARGS
|
||||
#define BOOST_FUNCTION_PARMS
|
||||
#define BOOST_FUNCTION_ARGS
|
||||
#define BOOST_FUNCTION_NOT_0_PARMS
|
||||
#define BOOST_FUNCTION_NOT_0_ARGS
|
||||
#define BOOST_FUNCTION_FUNCTION function0
|
||||
#define BOOST_FUNCTION_BASE function0_base
|
||||
#define BOOST_FUNCTION_INVOKER_BASE invoker_base0
|
||||
#define BOOST_FUNCTION_FUNCTION_INVOKER function_invoker0
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_INVOKER void_function_invoker0
|
||||
#define BOOST_FUNCTION_FUNCTION_OBJ_INVOKER function_obj_invoker0
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER void_function_obj_invoker0
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_INVOKER get_function_invoker0
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER get_function_obj_invoker0
|
||||
|
||||
#include <boost/function/function_template.hpp>
|
||||
|
||||
#undef BOOST_FUNCTION_NOT_0_ARGS
|
||||
#undef BOOST_FUNCTION_NOT_0_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_NUM_ARGS
|
||||
#undef BOOST_FUNCTION_COMMA
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_FUNCTION
|
||||
#undef BOOST_FUNCTION_BASE
|
||||
#undef BOOST_FUNCTION_INVOKER_BASE
|
||||
#undef BOOST_FUNCTION_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
|
||||
|
||||
#endif // BOOST_FUNCTION_FUNCTION0_HEADER
|
||||
#endif // BOOST_FUNCTION0_HPP
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Boost.Function library
|
||||
//
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
@ -10,28 +10,50 @@
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#ifndef BOOST_FUNCTION_FUNCTION1_HEADER
|
||||
#define BOOST_FUNCTION_FUNCTION1_HEADER
|
||||
#ifndef BOOST_FUNCTION1_HPP
|
||||
#define BOOST_FUNCTION1_HPP
|
||||
|
||||
#include <boost/function/function_base.hpp>
|
||||
|
||||
#define BOOST_FUNCTION_NUM_ARGS 1
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T0
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T0
|
||||
#define BOOST_FUNCTION_PARMS T0 a0
|
||||
#define BOOST_FUNCTION_ARGS a0
|
||||
#define BOOST_FUNCTION_NOT_0_PARMS
|
||||
#define BOOST_FUNCTION_NOT_0_ARGS
|
||||
#define BOOST_FUNCTION_COMMA ,
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T1
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T1
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_PARMS typename OtherT1
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_ARGS OtherT1
|
||||
#define BOOST_FUNCTION_PARMS T1 a1
|
||||
#define BOOST_FUNCTION_ARGS a1
|
||||
#define BOOST_FUNCTION_FUNCTION function1
|
||||
#define BOOST_FUNCTION_BASE function1_base
|
||||
#define BOOST_FUNCTION_INVOKER_BASE invoker_base1
|
||||
#define BOOST_FUNCTION_FUNCTION_INVOKER function_invoker1
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_INVOKER void_function_invoker1
|
||||
#define BOOST_FUNCTION_FUNCTION_OBJ_INVOKER function_obj_invoker1
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER void_function_obj_invoker1
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_INVOKER get_function_invoker1
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER get_function_obj_invoker1
|
||||
|
||||
#include <boost/function/function_template.hpp>
|
||||
|
||||
#undef BOOST_FUNCTION_NOT_0_ARGS
|
||||
#undef BOOST_FUNCTION_NOT_0_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_NUM_ARGS
|
||||
#undef BOOST_FUNCTION_COMMA
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_FUNCTION
|
||||
#undef BOOST_FUNCTION_BASE
|
||||
#undef BOOST_FUNCTION_INVOKER_BASE
|
||||
#undef BOOST_FUNCTION_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
|
||||
|
||||
#endif // BOOST_FUNCTION_FUNCTION1_HEADER
|
||||
#endif // BOOST_FUNCTION1_HPP
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Boost.Function library
|
||||
//
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
@ -10,28 +10,50 @@
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#ifndef BOOST_FUNCTION_FUNCTION10_HEADER
|
||||
#define BOOST_FUNCTION_FUNCTION10_HEADER
|
||||
#ifndef BOOST_FUNCTION10_HPP
|
||||
#define BOOST_FUNCTION10_HPP
|
||||
|
||||
#include <boost/function/function_base.hpp>
|
||||
|
||||
#define BOOST_FUNCTION_NUM_ARGS 10
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
|
||||
#define BOOST_FUNCTION_PARMS T0 a0, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9
|
||||
#define BOOST_FUNCTION_ARGS a0, a1, a2, a3, a4, a5, a6, a7, a8, a9
|
||||
#define BOOST_FUNCTION_NOT_0_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9
|
||||
#define BOOST_FUNCTION_NOT_0_ARGS a1, a2, a3, a4, a5, a6, a7, a8, a9
|
||||
#define BOOST_FUNCTION_COMMA ,
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_PARMS typename OtherT1, typename OtherT2, typename OtherT3, typename OtherT4, typename OtherT5, typename OtherT6, typename OtherT7, typename OtherT8, typename OtherT9, typename OtherT10
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_ARGS OtherT1, OtherT2, OtherT3, OtherT4, OtherT5, OtherT6, OtherT7, OtherT8, OtherT9, OtherT10
|
||||
#define BOOST_FUNCTION_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9, T10 a10
|
||||
#define BOOST_FUNCTION_ARGS a1, a2, a3, a4, a5, a6, a7, a8, a9, a10
|
||||
#define BOOST_FUNCTION_FUNCTION function10
|
||||
#define BOOST_FUNCTION_BASE function10_base
|
||||
#define BOOST_FUNCTION_INVOKER_BASE invoker_base10
|
||||
#define BOOST_FUNCTION_FUNCTION_INVOKER function_invoker10
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_INVOKER void_function_invoker10
|
||||
#define BOOST_FUNCTION_FUNCTION_OBJ_INVOKER function_obj_invoker10
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER void_function_obj_invoker10
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_INVOKER get_function_invoker10
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER get_function_obj_invoker10
|
||||
|
||||
#include <boost/function/function_template.hpp>
|
||||
|
||||
#undef BOOST_FUNCTION_NOT_0_ARGS
|
||||
#undef BOOST_FUNCTION_NOT_0_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_NUM_ARGS
|
||||
#undef BOOST_FUNCTION_COMMA
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_FUNCTION
|
||||
#undef BOOST_FUNCTION_BASE
|
||||
#undef BOOST_FUNCTION_INVOKER_BASE
|
||||
#undef BOOST_FUNCTION_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
|
||||
|
||||
#endif // BOOST_FUNCTION_FUNCTION10_HEADER
|
||||
#endif // BOOST_FUNCTION10_HPP
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Boost.Function library
|
||||
//
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
@ -10,28 +10,50 @@
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#ifndef BOOST_FUNCTION_FUNCTION2_HEADER
|
||||
#define BOOST_FUNCTION_FUNCTION2_HEADER
|
||||
#ifndef BOOST_FUNCTION2_HPP
|
||||
#define BOOST_FUNCTION2_HPP
|
||||
|
||||
#include <boost/function/function_base.hpp>
|
||||
|
||||
#define BOOST_FUNCTION_NUM_ARGS 2
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T0, typename T1
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T0, T1
|
||||
#define BOOST_FUNCTION_PARMS T0 a0, T1 a1
|
||||
#define BOOST_FUNCTION_ARGS a0, a1
|
||||
#define BOOST_FUNCTION_NOT_0_PARMS T1 a1
|
||||
#define BOOST_FUNCTION_NOT_0_ARGS a1
|
||||
#define BOOST_FUNCTION_COMMA ,
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T1, typename T2
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T1, T2
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_PARMS typename OtherT1, typename OtherT2
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_ARGS OtherT1, OtherT2
|
||||
#define BOOST_FUNCTION_PARMS T1 a1, T2 a2
|
||||
#define BOOST_FUNCTION_ARGS a1, a2
|
||||
#define BOOST_FUNCTION_FUNCTION function2
|
||||
#define BOOST_FUNCTION_BASE function2_base
|
||||
#define BOOST_FUNCTION_INVOKER_BASE invoker_base2
|
||||
#define BOOST_FUNCTION_FUNCTION_INVOKER function_invoker2
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_INVOKER void_function_invoker2
|
||||
#define BOOST_FUNCTION_FUNCTION_OBJ_INVOKER function_obj_invoker2
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER void_function_obj_invoker2
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_INVOKER get_function_invoker2
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER get_function_obj_invoker2
|
||||
|
||||
#include <boost/function/function_template.hpp>
|
||||
|
||||
#undef BOOST_FUNCTION_NOT_0_ARGS
|
||||
#undef BOOST_FUNCTION_NOT_0_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_NUM_ARGS
|
||||
#undef BOOST_FUNCTION_COMMA
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_FUNCTION
|
||||
#undef BOOST_FUNCTION_BASE
|
||||
#undef BOOST_FUNCTION_INVOKER_BASE
|
||||
#undef BOOST_FUNCTION_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
|
||||
|
||||
#endif // BOOST_FUNCTION_FUNCTION2_HEADER
|
||||
#endif // BOOST_FUNCTION2_HPP
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Boost.Function library
|
||||
//
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
@ -10,28 +10,50 @@
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#ifndef BOOST_FUNCTION_FUNCTION3_HEADER
|
||||
#define BOOST_FUNCTION_FUNCTION3_HEADER
|
||||
#ifndef BOOST_FUNCTION3_HPP
|
||||
#define BOOST_FUNCTION3_HPP
|
||||
|
||||
#include <boost/function/function_base.hpp>
|
||||
|
||||
#define BOOST_FUNCTION_NUM_ARGS 3
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T0, typename T1, typename T2
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T0, T1, T2
|
||||
#define BOOST_FUNCTION_PARMS T0 a0, T1 a1, T2 a2
|
||||
#define BOOST_FUNCTION_ARGS a0, a1, a2
|
||||
#define BOOST_FUNCTION_NOT_0_PARMS T1 a1, T2 a2
|
||||
#define BOOST_FUNCTION_NOT_0_ARGS a1, a2
|
||||
#define BOOST_FUNCTION_COMMA ,
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T1, typename T2, typename T3
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T1, T2, T3
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_PARMS typename OtherT1, typename OtherT2, typename OtherT3
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_ARGS OtherT1, OtherT2, OtherT3
|
||||
#define BOOST_FUNCTION_PARMS T1 a1, T2 a2, T3 a3
|
||||
#define BOOST_FUNCTION_ARGS a1, a2, a3
|
||||
#define BOOST_FUNCTION_FUNCTION function3
|
||||
#define BOOST_FUNCTION_BASE function3_base
|
||||
#define BOOST_FUNCTION_INVOKER_BASE invoker_base3
|
||||
#define BOOST_FUNCTION_FUNCTION_INVOKER function_invoker3
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_INVOKER void_function_invoker3
|
||||
#define BOOST_FUNCTION_FUNCTION_OBJ_INVOKER function_obj_invoker3
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER void_function_obj_invoker3
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_INVOKER get_function_invoker3
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER get_function_obj_invoker3
|
||||
|
||||
#include <boost/function/function_template.hpp>
|
||||
|
||||
#undef BOOST_FUNCTION_NOT_0_ARGS
|
||||
#undef BOOST_FUNCTION_NOT_0_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_NUM_ARGS
|
||||
#undef BOOST_FUNCTION_COMMA
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_FUNCTION
|
||||
#undef BOOST_FUNCTION_BASE
|
||||
#undef BOOST_FUNCTION_INVOKER_BASE
|
||||
#undef BOOST_FUNCTION_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
|
||||
|
||||
#endif // BOOST_FUNCTION_FUNCTION3_HEADER
|
||||
#endif // BOOST_FUNCTION3_HPP
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Boost.Function library
|
||||
//
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
@ -10,28 +10,50 @@
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#ifndef BOOST_FUNCTION_FUNCTION4_HEADER
|
||||
#define BOOST_FUNCTION_FUNCTION4_HEADER
|
||||
#ifndef BOOST_FUNCTION4_HPP
|
||||
#define BOOST_FUNCTION4_HPP
|
||||
|
||||
#include <boost/function/function_base.hpp>
|
||||
|
||||
#define BOOST_FUNCTION_NUM_ARGS 4
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T0, typename T1, typename T2, typename T3
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T0, T1, T2, T3
|
||||
#define BOOST_FUNCTION_PARMS T0 a0, T1 a1, T2 a2, T3 a3
|
||||
#define BOOST_FUNCTION_ARGS a0, a1, a2, a3
|
||||
#define BOOST_FUNCTION_NOT_0_PARMS T1 a1, T2 a2, T3 a3
|
||||
#define BOOST_FUNCTION_NOT_0_ARGS a1, a2, a3
|
||||
#define BOOST_FUNCTION_COMMA ,
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T1, typename T2, typename T3, typename T4
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T1, T2, T3, T4
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_PARMS typename OtherT1, typename OtherT2, typename OtherT3, typename OtherT4
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_ARGS OtherT1, OtherT2, OtherT3, OtherT4
|
||||
#define BOOST_FUNCTION_PARMS T1 a1, T2 a2, T3 a3, T4 a4
|
||||
#define BOOST_FUNCTION_ARGS a1, a2, a3, a4
|
||||
#define BOOST_FUNCTION_FUNCTION function4
|
||||
#define BOOST_FUNCTION_BASE function4_base
|
||||
#define BOOST_FUNCTION_INVOKER_BASE invoker_base4
|
||||
#define BOOST_FUNCTION_FUNCTION_INVOKER function_invoker4
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_INVOKER void_function_invoker4
|
||||
#define BOOST_FUNCTION_FUNCTION_OBJ_INVOKER function_obj_invoker4
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER void_function_obj_invoker4
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_INVOKER get_function_invoker4
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER get_function_obj_invoker4
|
||||
|
||||
#include <boost/function/function_template.hpp>
|
||||
|
||||
#undef BOOST_FUNCTION_NOT_0_ARGS
|
||||
#undef BOOST_FUNCTION_NOT_0_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_NUM_ARGS
|
||||
#undef BOOST_FUNCTION_COMMA
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_FUNCTION
|
||||
#undef BOOST_FUNCTION_BASE
|
||||
#undef BOOST_FUNCTION_INVOKER_BASE
|
||||
#undef BOOST_FUNCTION_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
|
||||
|
||||
#endif // BOOST_FUNCTION_FUNCTION4_HEADER
|
||||
#endif // BOOST_FUNCTION4_HPP
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Boost.Function library
|
||||
//
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
@ -10,28 +10,50 @@
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#ifndef BOOST_FUNCTION_FUNCTION5_HEADER
|
||||
#define BOOST_FUNCTION_FUNCTION5_HEADER
|
||||
#ifndef BOOST_FUNCTION5_HPP
|
||||
#define BOOST_FUNCTION5_HPP
|
||||
|
||||
#include <boost/function/function_base.hpp>
|
||||
|
||||
#define BOOST_FUNCTION_NUM_ARGS 5
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T0, typename T1, typename T2, typename T3, typename T4
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T0, T1, T2, T3, T4
|
||||
#define BOOST_FUNCTION_PARMS T0 a0, T1 a1, T2 a2, T3 a3, T4 a4
|
||||
#define BOOST_FUNCTION_ARGS a0, a1, a2, a3, a4
|
||||
#define BOOST_FUNCTION_NOT_0_PARMS T1 a1, T2 a2, T3 a3, T4 a4
|
||||
#define BOOST_FUNCTION_NOT_0_ARGS a1, a2, a3, a4
|
||||
#define BOOST_FUNCTION_COMMA ,
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T1, typename T2, typename T3, typename T4, typename T5
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T1, T2, T3, T4, T5
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_PARMS typename OtherT1, typename OtherT2, typename OtherT3, typename OtherT4, typename OtherT5
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_ARGS OtherT1, OtherT2, OtherT3, OtherT4, OtherT5
|
||||
#define BOOST_FUNCTION_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5
|
||||
#define BOOST_FUNCTION_ARGS a1, a2, a3, a4, a5
|
||||
#define BOOST_FUNCTION_FUNCTION function5
|
||||
#define BOOST_FUNCTION_BASE function5_base
|
||||
#define BOOST_FUNCTION_INVOKER_BASE invoker_base5
|
||||
#define BOOST_FUNCTION_FUNCTION_INVOKER function_invoker5
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_INVOKER void_function_invoker5
|
||||
#define BOOST_FUNCTION_FUNCTION_OBJ_INVOKER function_obj_invoker5
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER void_function_obj_invoker5
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_INVOKER get_function_invoker5
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER get_function_obj_invoker5
|
||||
|
||||
#include <boost/function/function_template.hpp>
|
||||
|
||||
#undef BOOST_FUNCTION_NOT_0_ARGS
|
||||
#undef BOOST_FUNCTION_NOT_0_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_NUM_ARGS
|
||||
#undef BOOST_FUNCTION_COMMA
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_FUNCTION
|
||||
#undef BOOST_FUNCTION_BASE
|
||||
#undef BOOST_FUNCTION_INVOKER_BASE
|
||||
#undef BOOST_FUNCTION_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
|
||||
|
||||
#endif // BOOST_FUNCTION_FUNCTION5_HEADER
|
||||
#endif // BOOST_FUNCTION5_HPP
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Boost.Function library
|
||||
//
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
@ -10,28 +10,50 @@
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#ifndef BOOST_FUNCTION_FUNCTION6_HEADER
|
||||
#define BOOST_FUNCTION_FUNCTION6_HEADER
|
||||
#ifndef BOOST_FUNCTION6_HPP
|
||||
#define BOOST_FUNCTION6_HPP
|
||||
|
||||
#include <boost/function/function_base.hpp>
|
||||
|
||||
#define BOOST_FUNCTION_NUM_ARGS 6
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T0, typename T1, typename T2, typename T3, typename T4, typename T5
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T0, T1, T2, T3, T4, T5
|
||||
#define BOOST_FUNCTION_PARMS T0 a0, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5
|
||||
#define BOOST_FUNCTION_ARGS a0, a1, a2, a3, a4, a5
|
||||
#define BOOST_FUNCTION_NOT_0_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5
|
||||
#define BOOST_FUNCTION_NOT_0_ARGS a1, a2, a3, a4, a5
|
||||
#define BOOST_FUNCTION_COMMA ,
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T1, typename T2, typename T3, typename T4, typename T5, typename T6
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T1, T2, T3, T4, T5, T6
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_PARMS typename OtherT1, typename OtherT2, typename OtherT3, typename OtherT4, typename OtherT5, typename OtherT6
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_ARGS OtherT1, OtherT2, OtherT3, OtherT4, OtherT5, OtherT6
|
||||
#define BOOST_FUNCTION_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6
|
||||
#define BOOST_FUNCTION_ARGS a1, a2, a3, a4, a5, a6
|
||||
#define BOOST_FUNCTION_FUNCTION function6
|
||||
#define BOOST_FUNCTION_BASE function6_base
|
||||
#define BOOST_FUNCTION_INVOKER_BASE invoker_base6
|
||||
#define BOOST_FUNCTION_FUNCTION_INVOKER function_invoker6
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_INVOKER void_function_invoker6
|
||||
#define BOOST_FUNCTION_FUNCTION_OBJ_INVOKER function_obj_invoker6
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER void_function_obj_invoker6
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_INVOKER get_function_invoker6
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER get_function_obj_invoker6
|
||||
|
||||
#include <boost/function/function_template.hpp>
|
||||
|
||||
#undef BOOST_FUNCTION_NOT_0_ARGS
|
||||
#undef BOOST_FUNCTION_NOT_0_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_NUM_ARGS
|
||||
#undef BOOST_FUNCTION_COMMA
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_FUNCTION
|
||||
#undef BOOST_FUNCTION_BASE
|
||||
#undef BOOST_FUNCTION_INVOKER_BASE
|
||||
#undef BOOST_FUNCTION_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
|
||||
|
||||
#endif // BOOST_FUNCTION_FUNCTION6_HEADER
|
||||
#endif // BOOST_FUNCTION6_HPP
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Boost.Function library
|
||||
//
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
@ -10,28 +10,50 @@
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#ifndef BOOST_FUNCTION_FUNCTION7_HEADER
|
||||
#define BOOST_FUNCTION_FUNCTION7_HEADER
|
||||
#ifndef BOOST_FUNCTION7_HPP
|
||||
#define BOOST_FUNCTION7_HPP
|
||||
|
||||
#include <boost/function/function_base.hpp>
|
||||
|
||||
#define BOOST_FUNCTION_NUM_ARGS 7
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T0, T1, T2, T3, T4, T5, T6
|
||||
#define BOOST_FUNCTION_PARMS T0 a0, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6
|
||||
#define BOOST_FUNCTION_ARGS a0, a1, a2, a3, a4, a5, a6
|
||||
#define BOOST_FUNCTION_NOT_0_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6
|
||||
#define BOOST_FUNCTION_NOT_0_ARGS a1, a2, a3, a4, a5, a6
|
||||
#define BOOST_FUNCTION_COMMA ,
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T1, T2, T3, T4, T5, T6, T7
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_PARMS typename OtherT1, typename OtherT2, typename OtherT3, typename OtherT4, typename OtherT5, typename OtherT6, typename OtherT7
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_ARGS OtherT1, OtherT2, OtherT3, OtherT4, OtherT5, OtherT6, OtherT7
|
||||
#define BOOST_FUNCTION_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7
|
||||
#define BOOST_FUNCTION_ARGS a1, a2, a3, a4, a5, a6, a7
|
||||
#define BOOST_FUNCTION_FUNCTION function7
|
||||
#define BOOST_FUNCTION_BASE function7_base
|
||||
#define BOOST_FUNCTION_INVOKER_BASE invoker_base7
|
||||
#define BOOST_FUNCTION_FUNCTION_INVOKER function_invoker7
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_INVOKER void_function_invoker7
|
||||
#define BOOST_FUNCTION_FUNCTION_OBJ_INVOKER function_obj_invoker7
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER void_function_obj_invoker7
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_INVOKER get_function_invoker7
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER get_function_obj_invoker7
|
||||
|
||||
#include <boost/function/function_template.hpp>
|
||||
|
||||
#undef BOOST_FUNCTION_NOT_0_ARGS
|
||||
#undef BOOST_FUNCTION_NOT_0_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_NUM_ARGS
|
||||
#undef BOOST_FUNCTION_COMMA
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_FUNCTION
|
||||
#undef BOOST_FUNCTION_BASE
|
||||
#undef BOOST_FUNCTION_INVOKER_BASE
|
||||
#undef BOOST_FUNCTION_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
|
||||
|
||||
#endif // BOOST_FUNCTION_FUNCTION7_HEADER
|
||||
#endif // BOOST_FUNCTION7_HPP
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Boost.Function library
|
||||
//
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
@ -10,28 +10,50 @@
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#ifndef BOOST_FUNCTION_FUNCTION8_HEADER
|
||||
#define BOOST_FUNCTION_FUNCTION8_HEADER
|
||||
#ifndef BOOST_FUNCTION8_HPP
|
||||
#define BOOST_FUNCTION8_HPP
|
||||
|
||||
#include <boost/function/function_base.hpp>
|
||||
|
||||
#define BOOST_FUNCTION_NUM_ARGS 8
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T0, T1, T2, T3, T4, T5, T6, T7
|
||||
#define BOOST_FUNCTION_PARMS T0 a0, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7
|
||||
#define BOOST_FUNCTION_ARGS a0, a1, a2, a3, a4, a5, a6, a7
|
||||
#define BOOST_FUNCTION_NOT_0_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7
|
||||
#define BOOST_FUNCTION_NOT_0_ARGS a1, a2, a3, a4, a5, a6, a7
|
||||
#define BOOST_FUNCTION_COMMA ,
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T1, T2, T3, T4, T5, T6, T7, T8
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_PARMS typename OtherT1, typename OtherT2, typename OtherT3, typename OtherT4, typename OtherT5, typename OtherT6, typename OtherT7, typename OtherT8
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_ARGS OtherT1, OtherT2, OtherT3, OtherT4, OtherT5, OtherT6, OtherT7, OtherT8
|
||||
#define BOOST_FUNCTION_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8
|
||||
#define BOOST_FUNCTION_ARGS a1, a2, a3, a4, a5, a6, a7, a8
|
||||
#define BOOST_FUNCTION_FUNCTION function8
|
||||
#define BOOST_FUNCTION_BASE function8_base
|
||||
#define BOOST_FUNCTION_INVOKER_BASE invoker_base8
|
||||
#define BOOST_FUNCTION_FUNCTION_INVOKER function_invoker8
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_INVOKER void_function_invoker8
|
||||
#define BOOST_FUNCTION_FUNCTION_OBJ_INVOKER function_obj_invoker8
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER void_function_obj_invoker8
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_INVOKER get_function_invoker8
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER get_function_obj_invoker8
|
||||
|
||||
#include <boost/function/function_template.hpp>
|
||||
|
||||
#undef BOOST_FUNCTION_NOT_0_ARGS
|
||||
#undef BOOST_FUNCTION_NOT_0_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_NUM_ARGS
|
||||
#undef BOOST_FUNCTION_COMMA
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_FUNCTION
|
||||
#undef BOOST_FUNCTION_BASE
|
||||
#undef BOOST_FUNCTION_INVOKER_BASE
|
||||
#undef BOOST_FUNCTION_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
|
||||
|
||||
#endif // BOOST_FUNCTION_FUNCTION8_HEADER
|
||||
#endif // BOOST_FUNCTION8_HPP
|
||||
|
@ -1,5 +1,5 @@
|
||||
// Boost.Function library
|
||||
//
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
@ -10,28 +10,50 @@
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#ifndef BOOST_FUNCTION_FUNCTION9_HEADER
|
||||
#define BOOST_FUNCTION_FUNCTION9_HEADER
|
||||
#ifndef BOOST_FUNCTION9_HPP
|
||||
#define BOOST_FUNCTION9_HPP
|
||||
|
||||
#include <boost/function/function_base.hpp>
|
||||
|
||||
#define BOOST_FUNCTION_NUM_ARGS 9
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T0, T1, T2, T3, T4, T5, T6, T7, T8
|
||||
#define BOOST_FUNCTION_PARMS T0 a0, T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8
|
||||
#define BOOST_FUNCTION_ARGS a0, a1, a2, a3, a4, a5, a6, a7, a8
|
||||
#define BOOST_FUNCTION_NOT_0_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8
|
||||
#define BOOST_FUNCTION_NOT_0_ARGS a1, a2, a3, a4, a5, a6, a7, a8
|
||||
#define BOOST_FUNCTION_COMMA ,
|
||||
#define BOOST_FUNCTION_TEMPLATE_PARMS typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9
|
||||
#define BOOST_FUNCTION_TEMPLATE_ARGS T1, T2, T3, T4, T5, T6, T7, T8, T9
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_PARMS typename OtherT1, typename OtherT2, typename OtherT3, typename OtherT4, typename OtherT5, typename OtherT6, typename OtherT7, typename OtherT8, typename OtherT9
|
||||
#define BOOST_FUNCTION_OTHER_TEMPLATE_ARGS OtherT1, OtherT2, OtherT3, OtherT4, OtherT5, OtherT6, OtherT7, OtherT8, OtherT9
|
||||
#define BOOST_FUNCTION_PARMS T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7, T8 a8, T9 a9
|
||||
#define BOOST_FUNCTION_ARGS a1, a2, a3, a4, a5, a6, a7, a8, a9
|
||||
#define BOOST_FUNCTION_FUNCTION function9
|
||||
#define BOOST_FUNCTION_BASE function9_base
|
||||
#define BOOST_FUNCTION_INVOKER_BASE invoker_base9
|
||||
#define BOOST_FUNCTION_FUNCTION_INVOKER function_invoker9
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_INVOKER void_function_invoker9
|
||||
#define BOOST_FUNCTION_FUNCTION_OBJ_INVOKER function_obj_invoker9
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER void_function_obj_invoker9
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_INVOKER get_function_invoker9
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER get_function_obj_invoker9
|
||||
|
||||
#include <boost/function/function_template.hpp>
|
||||
|
||||
#undef BOOST_FUNCTION_NOT_0_ARGS
|
||||
#undef BOOST_FUNCTION_NOT_0_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_NUM_ARGS
|
||||
#undef BOOST_FUNCTION_COMMA
|
||||
#undef BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_PARMS
|
||||
#undef BOOST_FUNCTION_OTHER_TEMPLATE_ARGS
|
||||
#undef BOOST_FUNCTION_PARMS
|
||||
#undef BOOST_FUNCTION_ARGS
|
||||
#undef BOOST_FUNCTION_FUNCTION
|
||||
#undef BOOST_FUNCTION_BASE
|
||||
#undef BOOST_FUNCTION_INVOKER_BASE
|
||||
#undef BOOST_FUNCTION_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
|
||||
|
||||
#endif // BOOST_FUNCTION_FUNCTION9_HEADER
|
||||
#endif // BOOST_FUNCTION9_HPP
|
||||
|
@ -19,8 +19,6 @@
|
||||
#include <string>
|
||||
#include <stdexcept>
|
||||
#include <memory>
|
||||
#include <new>
|
||||
#include <typeinfo>
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/type_traits.hpp>
|
||||
|
||||
@ -80,11 +78,9 @@ namespace boost {
|
||||
union any_pointer
|
||||
{
|
||||
void* obj_ptr;
|
||||
const void* const_obj_ptr;
|
||||
void (*func_ptr)();
|
||||
|
||||
explicit any_pointer(void* p) : obj_ptr(p) {}
|
||||
explicit any_pointer(const void* p) : const_obj_ptr(p) {}
|
||||
explicit any_pointer(void (*p)()) : func_ptr(p) {}
|
||||
};
|
||||
|
||||
@ -113,29 +109,13 @@ namespace boost {
|
||||
};
|
||||
|
||||
// The operation type to perform on the given functor/function pointer
|
||||
enum functor_manager_operation_type {
|
||||
clone_functor_tag,
|
||||
destroy_functor_tag
|
||||
};
|
||||
enum functor_manager_operation_type { clone_functor, destroy_functor };
|
||||
|
||||
// Tags used to decide between different types of functions
|
||||
// Tags used to decide between function and function object pointers.
|
||||
struct function_ptr_tag {};
|
||||
struct function_obj_tag {};
|
||||
struct member_ptr_tag {};
|
||||
|
||||
template<typename F>
|
||||
class get_function_tag
|
||||
{
|
||||
typedef typename IF<(is_pointer<F>::value),
|
||||
function_ptr_tag,
|
||||
function_obj_tag>::type ptr_or_obj_tag;
|
||||
|
||||
public:
|
||||
typedef typename IF<(is_member_pointer<F>::value),
|
||||
member_ptr_tag,
|
||||
ptr_or_obj_tag>::type type;
|
||||
};
|
||||
|
||||
#ifndef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
/**
|
||||
* The functor_manager class contains a static function "manage" which
|
||||
* can clone or destroy the given function/function object pointer.
|
||||
@ -145,13 +125,20 @@ namespace boost {
|
||||
{
|
||||
private:
|
||||
typedef Functor functor_type;
|
||||
# ifndef BOOST_NO_STD_ALLOCATOR
|
||||
typedef typename Allocator::template rebind<functor_type>::other
|
||||
allocator_type;
|
||||
typedef typename allocator_type::pointer pointer_type;
|
||||
# else
|
||||
typedef functor_type* pointer_type;
|
||||
# endif // BOOST_NO_STD_ALLOCATOR
|
||||
|
||||
// For function pointers, the manager is trivial
|
||||
static inline any_pointer
|
||||
manager(any_pointer function_ptr, functor_manager_operation_type op,
|
||||
function_ptr_tag)
|
||||
{
|
||||
if (op == clone_functor_tag)
|
||||
if (op == clone_functor)
|
||||
return function_ptr;
|
||||
else
|
||||
return any_pointer(static_cast<void (*)()>(0));
|
||||
@ -164,19 +151,11 @@ namespace boost {
|
||||
functor_manager_operation_type op,
|
||||
function_obj_tag)
|
||||
{
|
||||
#ifndef BOOST_NO_STD_ALLOCATOR
|
||||
typedef typename Allocator::template rebind<functor_type>::other
|
||||
allocator_type;
|
||||
typedef typename allocator_type::pointer pointer_type;
|
||||
#else
|
||||
typedef functor_type* pointer_type;
|
||||
#endif // BOOST_NO_STD_ALLOCATOR
|
||||
|
||||
# ifndef BOOST_NO_STD_ALLOCATOR
|
||||
allocator_type allocator;
|
||||
# endif // BOOST_NO_STD_ALLOCATOR
|
||||
|
||||
if (op == clone_functor_tag) {
|
||||
if (op == clone_functor) {
|
||||
functor_type* f =
|
||||
static_cast<functor_type*>(function_obj_ptr.obj_ptr);
|
||||
|
||||
@ -212,16 +191,21 @@ namespace boost {
|
||||
return any_pointer(static_cast<void*>(0));
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
/* Dispatch to an appropriate manager based on whether we have a
|
||||
function pointer or a function object pointer. */
|
||||
static any_pointer
|
||||
manage(any_pointer functor_ptr, functor_manager_operation_type op)
|
||||
{
|
||||
typedef typename get_function_tag<functor_type>::type tag_type;
|
||||
typedef typename IF<(is_pointer<functor_type>::value),
|
||||
function_ptr_tag,
|
||||
function_obj_tag>::type tag_type;
|
||||
|
||||
return manager(functor_ptr, op, tag_type());
|
||||
}
|
||||
};
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
|
||||
// value=1 if the given type is not "unusable"
|
||||
template<typename T>
|
||||
@ -267,6 +251,16 @@ namespace boost {
|
||||
*/
|
||||
class function_base
|
||||
{
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
public:
|
||||
function_base() : impl(0) {}
|
||||
|
||||
bool empty() const { return impl == 0; }
|
||||
|
||||
|
||||
protected:
|
||||
void* impl; // Derived class is responsible for knowing the real type
|
||||
#else
|
||||
public:
|
||||
function_base() : manager(0), functor(static_cast<void*>(0)) {}
|
||||
|
||||
@ -278,6 +272,7 @@ namespace boost {
|
||||
detail::function::any_pointer,
|
||||
detail::function::functor_manager_operation_type);
|
||||
detail::function::any_pointer functor;
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
|
||||
private:
|
||||
struct dummy {
|
||||
|
@ -13,73 +13,179 @@
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
// Note: this header is a header template and must NOT have multiple-inclusion
|
||||
// protection.
|
||||
/* Note: this header is a header template and must NOT have multiple-inclusion
|
||||
protection. */
|
||||
|
||||
#ifndef BOOST_FUNCTION_FUNCTION_TEMPLATE_HPP
|
||||
#define BOOST_FUNCTION_FUNCTION_TEMPLATE_HPP
|
||||
# include <cassert>
|
||||
# include <algorithm>
|
||||
# include <boost/config.hpp>
|
||||
# include <boost/function/function_base.hpp>
|
||||
# include <boost/mem_fn.hpp>
|
||||
#endif // BOOST_FUNCTION_FUNCTION_TEMPLATE_HPP
|
||||
#include <cassert>
|
||||
#include <algorithm>
|
||||
|
||||
// Type of the default allocator
|
||||
#ifndef BOOST_NO_STD_ALLOCATOR
|
||||
# define BOOST_FUNCTION_DEFAULT_ALLOCATOR std::allocator<function_base>
|
||||
// Zero-initialize the "invoker" member of the functionN object.
|
||||
// The invoker member only exists when we aren't using the virtual
|
||||
// function implementation
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
# define BOOST_FUNCTION_INIT
|
||||
#else
|
||||
# define BOOST_FUNCTION_DEFAULT_ALLOCATOR int
|
||||
#endif // BOOST_NO_STD_ALLOCATOR
|
||||
|
||||
// Comma if nonzero number of arguments
|
||||
#if BOOST_FUNCTION_NUM_ARGS == 0
|
||||
# define BOOST_FUNCTION_COMMA
|
||||
#else
|
||||
# define BOOST_FUNCTION_COMMA ,
|
||||
#endif // BOOST_FUNCTION_NUM_ARGS > 0
|
||||
|
||||
// Class names used in this version of the code
|
||||
#define BOOST_FUNCTION_FUNCTION BOOST_JOIN(function,BOOST_FUNCTION_NUM_ARGS)
|
||||
#define BOOST_FUNCTION_BASE BOOST_JOIN(function_base,BOOST_FUNCTION_NUM_ARGS)
|
||||
#define BOOST_FUNCTION_FUNCTION_INVOKER \
|
||||
BOOST_JOIN(function_invoker,BOOST_FUNCTION_NUM_ARGS)
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_INVOKER \
|
||||
BOOST_JOIN(void_function_invoker,BOOST_FUNCTION_NUM_ARGS)
|
||||
#define BOOST_FUNCTION_FUNCTION_OBJ_INVOKER \
|
||||
BOOST_JOIN(function_obj_invoker,BOOST_FUNCTION_NUM_ARGS)
|
||||
#define BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER \
|
||||
BOOST_JOIN(void_function_obj_invoker,BOOST_FUNCTION_NUM_ARGS)
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_INVOKER \
|
||||
BOOST_JOIN(get_function_invoker,BOOST_FUNCTION_NUM_ARGS)
|
||||
#define BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER \
|
||||
BOOST_JOIN(get_function_obj_invoker,BOOST_FUNCTION_NUM_ARGS)
|
||||
# define BOOST_FUNCTION_INIT , invoker(0)
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
|
||||
namespace boost {
|
||||
namespace detail {
|
||||
namespace function {
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS>
|
||||
struct BOOST_FUNCTION_INVOKER_BASE
|
||||
{
|
||||
virtual ~BOOST_FUNCTION_INVOKER_BASE() {}
|
||||
virtual R call(BOOST_FUNCTION_PARMS) const = 0;
|
||||
virtual BOOST_FUNCTION_INVOKER_BASE* clone() const = 0;
|
||||
virtual void destroy(BOOST_FUNCTION_INVOKER_BASE*) = 0;
|
||||
};
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
|
||||
template<
|
||||
typename FunctionPtr,
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
typename Allocator,
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
typename R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
>
|
||||
struct BOOST_FUNCTION_FUNCTION_INVOKER
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
: public BOOST_FUNCTION_INVOKER_BASE<
|
||||
R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
>
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
{
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
explicit BOOST_FUNCTION_FUNCTION_INVOKER(FunctionPtr f) :
|
||||
function_ptr(f) {}
|
||||
|
||||
virtual R call(BOOST_FUNCTION_PARMS) const
|
||||
{
|
||||
return function_ptr(BOOST_FUNCTION_ARGS);
|
||||
}
|
||||
|
||||
virtual BOOST_FUNCTION_FUNCTION_INVOKER* clone() const
|
||||
{
|
||||
# ifdef BOOST_NO_STD_ALLOCATOR
|
||||
return new BOOST_FUNCTION_FUNCTION_INVOKER(function_ptr);
|
||||
# else
|
||||
typedef typename Allocator::
|
||||
template rebind<BOOST_FUNCTION_FUNCTION_INVOKER>::other
|
||||
allocator_type;
|
||||
typedef typename allocator_type::pointer pointer_type;
|
||||
allocator_type allocator;
|
||||
|
||||
pointer_type copy = allocator.allocate(1);
|
||||
allocator.construct(copy, *this);
|
||||
return static_cast<BOOST_FUNCTION_FUNCTION_INVOKER*>(copy);
|
||||
# endif // BOOST_NO_STD_ALLOCATOR
|
||||
}
|
||||
|
||||
virtual void destroy(BOOST_FUNCTION_INVOKER_BASE<
|
||||
R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
>* p)
|
||||
{
|
||||
# ifdef BOOST_NO_STD_ALLOCATOR
|
||||
delete p;
|
||||
# else
|
||||
BOOST_FUNCTION_FUNCTION_INVOKER* victim =
|
||||
dynamic_cast<BOOST_FUNCTION_FUNCTION_INVOKER*>(p);
|
||||
|
||||
typedef typename Allocator::
|
||||
template rebind<BOOST_FUNCTION_FUNCTION_INVOKER>::other
|
||||
allocator_type;
|
||||
typedef typename allocator_type::pointer pointer_type;
|
||||
allocator_type allocator;
|
||||
|
||||
allocator.destroy(victim);
|
||||
allocator.deallocate(victim, 1);
|
||||
# endif // BOOST_NO_STD_ALLOCATOR
|
||||
}
|
||||
|
||||
private:
|
||||
FunctionPtr function_ptr;
|
||||
#else
|
||||
static R invoke(any_pointer function_ptr BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_PARMS)
|
||||
{
|
||||
FunctionPtr f = reinterpret_cast<FunctionPtr>(function_ptr.func_ptr);
|
||||
return f(BOOST_FUNCTION_ARGS);
|
||||
}
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
};
|
||||
|
||||
template<
|
||||
typename FunctionPtr,
|
||||
# ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
typename Allocator,
|
||||
# endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
typename R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
>
|
||||
struct BOOST_FUNCTION_VOID_FUNCTION_INVOKER
|
||||
# ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
: public BOOST_FUNCTION_INVOKER_BASE<
|
||||
unusable BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
>
|
||||
# endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
{
|
||||
# ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
explicit BOOST_FUNCTION_VOID_FUNCTION_INVOKER(FunctionPtr f) :
|
||||
function_ptr(f) {}
|
||||
|
||||
virtual unusable call(BOOST_FUNCTION_PARMS) const
|
||||
{
|
||||
function_ptr(BOOST_FUNCTION_ARGS);
|
||||
return unusable();
|
||||
}
|
||||
|
||||
virtual BOOST_FUNCTION_VOID_FUNCTION_INVOKER* clone() const
|
||||
{
|
||||
# ifdef BOOST_NO_STD_ALLOCATOR
|
||||
return new BOOST_FUNCTION_VOID_FUNCTION_INVOKER(function_ptr);
|
||||
# else
|
||||
typedef typename Allocator::
|
||||
template rebind<BOOST_FUNCTION_VOID_FUNCTION_INVOKER>::other
|
||||
allocator_type;
|
||||
typedef typename allocator_type::pointer pointer_type;
|
||||
allocator_type allocator;
|
||||
|
||||
pointer_type copy = allocator.allocate(1);
|
||||
allocator.construct(copy, *this);
|
||||
return static_cast<BOOST_FUNCTION_VOID_FUNCTION_INVOKER*>(copy);
|
||||
# endif // BOOST_NO_STD_ALLOCATOR
|
||||
}
|
||||
|
||||
virtual void destroy(BOOST_FUNCTION_INVOKER_BASE<
|
||||
unusable BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
>* p)
|
||||
{
|
||||
# ifdef BOOST_NO_STD_ALLOCATOR
|
||||
delete p;
|
||||
# else
|
||||
BOOST_FUNCTION_VOID_FUNCTION_INVOKER* victim =
|
||||
dynamic_cast<BOOST_FUNCTION_VOID_FUNCTION_INVOKER*>(p);
|
||||
|
||||
typedef typename Allocator::
|
||||
template rebind<BOOST_FUNCTION_VOID_FUNCTION_INVOKER>::other
|
||||
allocator_type;
|
||||
typedef typename allocator_type::pointer pointer_type;
|
||||
allocator_type allocator;
|
||||
|
||||
allocator.destroy(victim);
|
||||
allocator.deallocate(victim, 1);
|
||||
# endif // BOOST_NO_STD_ALLOCATOR
|
||||
}
|
||||
|
||||
private:
|
||||
FunctionPtr function_ptr;
|
||||
# else
|
||||
static unusable invoke(any_pointer function_ptr BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_PARMS)
|
||||
|
||||
@ -88,15 +194,76 @@ namespace boost {
|
||||
f(BOOST_FUNCTION_ARGS);
|
||||
return unusable();
|
||||
}
|
||||
# endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
};
|
||||
|
||||
template<
|
||||
typename FunctionObj,
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
typename Allocator,
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
typename R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
>
|
||||
struct BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
: public BOOST_FUNCTION_INVOKER_BASE<
|
||||
R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
>
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
{
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
explicit BOOST_FUNCTION_FUNCTION_OBJ_INVOKER(const FunctionObj& f) :
|
||||
function_obj(f) {}
|
||||
|
||||
virtual R call(BOOST_FUNCTION_PARMS) const
|
||||
{
|
||||
return function_obj(BOOST_FUNCTION_ARGS);
|
||||
}
|
||||
|
||||
virtual BOOST_FUNCTION_FUNCTION_OBJ_INVOKER* clone() const
|
||||
{
|
||||
#ifdef BOOST_NO_STD_ALLOCATOR
|
||||
return new BOOST_FUNCTION_FUNCTION_OBJ_INVOKER(function_obj);
|
||||
#else
|
||||
typedef typename Allocator::
|
||||
template rebind<BOOST_FUNCTION_FUNCTION_OBJ_INVOKER>::other
|
||||
allocator_type;
|
||||
typedef typename allocator_type::pointer pointer_type;
|
||||
allocator_type allocator;
|
||||
|
||||
pointer_type copy = allocator.allocate(1);
|
||||
allocator.construct(copy, *this);
|
||||
return static_cast<BOOST_FUNCTION_FUNCTION_OBJ_INVOKER*>(copy);
|
||||
#endif // BOOST_NO_STD_ALLOCATOR
|
||||
}
|
||||
|
||||
virtual void destroy(BOOST_FUNCTION_INVOKER_BASE<
|
||||
R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
>* p)
|
||||
{
|
||||
#ifdef BOOST_NO_STD_ALLOCATOR
|
||||
delete p;
|
||||
#else
|
||||
BOOST_FUNCTION_FUNCTION_OBJ_INVOKER* victim =
|
||||
dynamic_cast<BOOST_FUNCTION_FUNCTION_OBJ_INVOKER*>(p);
|
||||
|
||||
typedef typename Allocator::
|
||||
template rebind<BOOST_FUNCTION_FUNCTION_OBJ_INVOKER>::other
|
||||
allocator_type;
|
||||
typedef typename allocator_type::pointer pointer_type;
|
||||
allocator_type allocator;
|
||||
|
||||
allocator.destroy(victim);
|
||||
allocator.deallocate(victim, 1);
|
||||
#endif // BOOST_NO_STD_ALLOCATOR
|
||||
}
|
||||
|
||||
private:
|
||||
mutable FunctionObj function_obj;
|
||||
#else
|
||||
static R invoke(any_pointer function_obj_ptr BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_PARMS)
|
||||
|
||||
@ -104,15 +271,77 @@ namespace boost {
|
||||
FunctionObj* f = static_cast<FunctionObj*>(function_obj_ptr.obj_ptr);
|
||||
return (*f)(BOOST_FUNCTION_ARGS);
|
||||
}
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
};
|
||||
|
||||
template<
|
||||
typename FunctionObj,
|
||||
# ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
typename Allocator,
|
||||
# endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
typename R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
>
|
||||
struct BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
|
||||
# ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
: public BOOST_FUNCTION_INVOKER_BASE<
|
||||
unusable BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
>
|
||||
# endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
{
|
||||
# ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
explicit BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER(const FunctionObj& f)
|
||||
: function_obj(f) {}
|
||||
|
||||
virtual unusable call(BOOST_FUNCTION_PARMS) const
|
||||
{
|
||||
function_obj(BOOST_FUNCTION_ARGS);
|
||||
return unusable();
|
||||
}
|
||||
|
||||
virtual BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER* clone() const
|
||||
{
|
||||
# ifdef BOOST_NO_STD_ALLOCATOR
|
||||
return new BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER(function_obj);
|
||||
# else
|
||||
typedef typename Allocator::
|
||||
template rebind<BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER>::other
|
||||
allocator_type;
|
||||
typedef typename allocator_type::pointer pointer_type;
|
||||
allocator_type allocator;
|
||||
|
||||
pointer_type copy = allocator.allocate(1);
|
||||
allocator.construct(copy, *this);
|
||||
return static_cast<BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER*>(copy);
|
||||
# endif // BOOST_NO_STD_ALLOCATOR
|
||||
}
|
||||
|
||||
virtual void destroy(BOOST_FUNCTION_INVOKER_BASE<
|
||||
unusable BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
>* p)
|
||||
{
|
||||
# ifdef BOOST_NO_STD_ALLOCATOR
|
||||
delete p;
|
||||
# else
|
||||
BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER* victim =
|
||||
dynamic_cast<BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER*>(p);
|
||||
|
||||
typedef typename Allocator::
|
||||
template rebind<BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER>::other
|
||||
allocator_type;
|
||||
typedef typename allocator_type::pointer pointer_type;
|
||||
allocator_type allocator;
|
||||
|
||||
allocator.destroy(victim);
|
||||
allocator.deallocate(victim, 1);
|
||||
# endif // BOOST_NO_STD_ALLOCATOR
|
||||
}
|
||||
|
||||
private:
|
||||
mutable FunctionObj function_obj;
|
||||
# else
|
||||
static unusable invoke(any_pointer function_obj_ptr
|
||||
BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_PARMS)
|
||||
@ -122,10 +351,12 @@ namespace boost {
|
||||
(*f)(BOOST_FUNCTION_ARGS);
|
||||
return unusable();
|
||||
}
|
||||
# endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
};
|
||||
|
||||
template<
|
||||
typename FunctionPtr,
|
||||
typename Allocator,
|
||||
typename R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
>
|
||||
@ -134,11 +365,17 @@ namespace boost {
|
||||
typedef typename IF<(is_void<R>::value),
|
||||
BOOST_FUNCTION_VOID_FUNCTION_INVOKER<
|
||||
FunctionPtr,
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
Allocator,
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
>,
|
||||
BOOST_FUNCTION_FUNCTION_INVOKER<
|
||||
FunctionPtr,
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
Allocator,
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
>
|
||||
@ -147,6 +384,7 @@ namespace boost {
|
||||
|
||||
template<
|
||||
typename FunctionObj,
|
||||
typename Allocator,
|
||||
typename R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_PARMS
|
||||
>
|
||||
@ -155,11 +393,17 @@ namespace boost {
|
||||
typedef typename IF<(is_void<R>::value),
|
||||
BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER<
|
||||
FunctionObj,
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
Allocator,
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
>,
|
||||
BOOST_FUNCTION_FUNCTION_OBJ_INVOKER<
|
||||
FunctionObj,
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
Allocator,
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
>
|
||||
@ -173,7 +417,7 @@ namespace boost {
|
||||
BOOST_FUNCTION_TEMPLATE_PARMS,
|
||||
typename Policy = empty_function_policy,
|
||||
typename Mixin = empty_function_mixin,
|
||||
typename Allocator = BOOST_FUNCTION_DEFAULT_ALLOCATOR
|
||||
typename Allocator = std::allocator<function_base>
|
||||
>
|
||||
class BOOST_FUNCTION_FUNCTION : public function_base, public Mixin
|
||||
{
|
||||
@ -181,10 +425,10 @@ namespace boost {
|
||||
BOOST_STATIC_CONSTANT(int, args = BOOST_FUNCTION_NUM_ARGS);
|
||||
|
||||
#if BOOST_FUNCTION_NUM_ARGS == 1
|
||||
typedef T0 argument_type;
|
||||
typedef T1 argument_type;
|
||||
#elif BOOST_FUNCTION_NUM_ARGS == 2
|
||||
typedef T0 first_argument_type;
|
||||
typedef T1 second_argument_type;
|
||||
typedef T1 first_argument_type;
|
||||
typedef T2 second_argument_type;
|
||||
#endif
|
||||
typedef typename detail::function::function_return_type<R>::type
|
||||
result_type;
|
||||
@ -193,10 +437,20 @@ namespace boost {
|
||||
typedef Allocator allocator_type;
|
||||
typedef BOOST_FUNCTION_FUNCTION self_type;
|
||||
|
||||
BOOST_FUNCTION_FUNCTION() : function_base(), Mixin(), invoker(0) {}
|
||||
private:
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
typedef detail::function::BOOST_FUNCTION_INVOKER_BASE<
|
||||
result_type BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
>
|
||||
impl_type;
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
|
||||
public:
|
||||
BOOST_FUNCTION_FUNCTION() : function_base(), Mixin() BOOST_FUNCTION_INIT {}
|
||||
|
||||
explicit BOOST_FUNCTION_FUNCTION(const Mixin& m) :
|
||||
function_base(), Mixin(m), invoker(0)
|
||||
function_base(), Mixin(m) BOOST_FUNCTION_INIT
|
||||
{
|
||||
}
|
||||
|
||||
@ -204,29 +458,30 @@ namespace boost {
|
||||
// one with a default parameter.
|
||||
template<typename Functor>
|
||||
BOOST_FUNCTION_FUNCTION(const Functor& f) :
|
||||
function_base(), Mixin(), invoker(0)
|
||||
function_base(), Mixin() BOOST_FUNCTION_INIT
|
||||
{
|
||||
this->assign_to(f);
|
||||
}
|
||||
|
||||
template<typename Functor>
|
||||
BOOST_FUNCTION_FUNCTION(const Functor& f, const Mixin& m) :
|
||||
function_base(), Mixin(m) BOOST_FUNCTION_INIT
|
||||
{
|
||||
this->assign_to(f);
|
||||
}
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
template<typename Functor>
|
||||
BOOST_FUNCTION_FUNCTION(Functor* f) :
|
||||
function_base(), Mixin(), invoker(0)
|
||||
BOOST_FUNCTION_FUNCTION(Functor* f, const Mixin& m = Mixin()) :
|
||||
function_base(), Mixin(m) BOOST_FUNCTION_INIT
|
||||
{
|
||||
this->assign_to(f);
|
||||
}
|
||||
#endif // __BORLANDC__
|
||||
|
||||
template<typename Functor>
|
||||
BOOST_FUNCTION_FUNCTION(const Functor& f, const Mixin& m) :
|
||||
function_base(), Mixin(m), invoker(0)
|
||||
{
|
||||
this->assign_to(f);
|
||||
}
|
||||
|
||||
BOOST_FUNCTION_FUNCTION(const BOOST_FUNCTION_FUNCTION& f) :
|
||||
function_base(), Mixin(static_cast<const Mixin&>(f)), invoker(0)
|
||||
function_base(), Mixin(static_cast<const Mixin&>(f))
|
||||
BOOST_FUNCTION_INIT
|
||||
{
|
||||
this->assign_to_own(f);
|
||||
}
|
||||
@ -240,8 +495,13 @@ namespace boost {
|
||||
policy_type policy;
|
||||
policy.precall(this);
|
||||
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
const impl_type* i = reinterpret_cast<const impl_type*>(impl);
|
||||
result_type result = i->call(BOOST_FUNCTION_ARGS);
|
||||
#else
|
||||
result_type result = invoker(functor BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_ARGS);
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
|
||||
policy.postcall(this);
|
||||
return result;
|
||||
@ -306,36 +566,55 @@ namespace boost {
|
||||
if (&other == this)
|
||||
return;
|
||||
|
||||
#ifndef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
std::swap(manager, other.manager);
|
||||
std::swap(functor, other.functor);
|
||||
std::swap(invoker, other.invoker);
|
||||
std::swap(static_cast<Mixin&>(*this), static_cast<Mixin&>(other));
|
||||
#else
|
||||
std::swap(impl, other.impl);
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
std::swap(static_cast<Mixin&>(*this),static_cast<Mixin&>(other));
|
||||
}
|
||||
|
||||
// Clear out a target, if there is one
|
||||
void clear()
|
||||
{
|
||||
#ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
if (impl) {
|
||||
impl_type* i = reinterpret_cast<impl_type*>(impl);
|
||||
i->destroy(i);
|
||||
impl = 0;
|
||||
}
|
||||
#else
|
||||
if (manager)
|
||||
functor = manager(functor, detail::function::destroy_functor_tag);
|
||||
functor = manager(functor, detail::function::destroy_functor);
|
||||
|
||||
manager = 0;
|
||||
invoker = 0;
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
}
|
||||
|
||||
private:
|
||||
void assign_to_own(const BOOST_FUNCTION_FUNCTION& f)
|
||||
{
|
||||
if (!f.empty()) {
|
||||
# ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
impl_type* other_impl = reinterpret_cast<impl_type*>(f.impl);
|
||||
impl = static_cast<void*>(other_impl->clone());
|
||||
# else
|
||||
invoker = f.invoker;
|
||||
manager = f.manager;
|
||||
functor = f.manager(f.functor, detail::function::clone_functor_tag);
|
||||
functor = f.manager(f.functor, detail::function::clone_functor);
|
||||
# endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
}
|
||||
}
|
||||
|
||||
template<typename Functor>
|
||||
void assign_to(const Functor& f)
|
||||
{
|
||||
typedef typename detail::function::get_function_tag<Functor>::type tag;
|
||||
typedef typename detail::function::IF<(is_pointer<Functor>::value),
|
||||
detail::function::function_ptr_tag,
|
||||
detail::function::function_obj_tag>::type tag;
|
||||
this->assign_to(f, tag());
|
||||
}
|
||||
|
||||
@ -347,28 +626,37 @@ namespace boost {
|
||||
if (f) {
|
||||
typedef typename detail::function::BOOST_FUNCTION_GET_FUNCTION_INVOKER<
|
||||
FunctionPtr,
|
||||
Allocator,
|
||||
R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
>::type
|
||||
invoker_type;
|
||||
|
||||
# ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
# ifdef BOOST_NO_STD_ALLOCATOR
|
||||
impl_type* i = new invoker_type(f);
|
||||
# else
|
||||
typedef typename Allocator::template rebind<invoker_type>::other
|
||||
allocator_type;
|
||||
typedef typename allocator_type::pointer pointer_type;
|
||||
allocator_type allocator;
|
||||
|
||||
pointer_type copy = allocator.allocate(1);
|
||||
new (copy) invoker_type(f);
|
||||
impl_type* i = static_cast<impl_type*>(copy);
|
||||
# endif // BOOST_NO_STD_ALLOCATOR
|
||||
impl = static_cast<void*>(i);
|
||||
# else
|
||||
invoker = &invoker_type::invoke;
|
||||
manager = &detail::function::functor_manager<FunctionPtr,
|
||||
Allocator>::manage;
|
||||
functor = manager(detail::function::any_pointer(
|
||||
reinterpret_cast<void (*)()>(f)
|
||||
),
|
||||
detail::function::clone_functor_tag);
|
||||
detail::function::clone_functor);
|
||||
# endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
}
|
||||
}
|
||||
|
||||
#if BOOST_FUNCTION_NUM_ARGS > 0
|
||||
template<typename MemberPtr>
|
||||
void assign_to(MemberPtr f, detail::function::member_ptr_tag)
|
||||
{
|
||||
this->assign_to(mem_fn(f));
|
||||
}
|
||||
#endif // BOOST_FUNCTION_NUM_ARGS > 0
|
||||
|
||||
template<typename FunctionObj>
|
||||
void assign_to(const FunctionObj& f, detail::function::function_obj_tag)
|
||||
@ -377,25 +665,44 @@ namespace boost {
|
||||
typedef
|
||||
typename detail::function::BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER<
|
||||
FunctionObj,
|
||||
Allocator,
|
||||
R BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS
|
||||
>::type
|
||||
invoker_type;
|
||||
|
||||
# ifdef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
# ifdef BOOST_NO_STD_ALLOCATOR
|
||||
impl_type* i = new invoker_type(f);
|
||||
# else
|
||||
typedef typename Allocator::template rebind<invoker_type>::other
|
||||
allocator_type;
|
||||
typedef typename allocator_type::pointer pointer_type;
|
||||
allocator_type allocator;
|
||||
|
||||
pointer_type copy = allocator.allocate(1);
|
||||
new (copy) invoker_type(f);
|
||||
impl_type* i = static_cast<impl_type*>(copy);
|
||||
# endif // BOOST_NO_STD_ALLOCATOR
|
||||
impl = static_cast<void*>(i);
|
||||
# else
|
||||
invoker = &invoker_type::invoke;
|
||||
manager = &detail::function::functor_manager<FunctionObj,
|
||||
Allocator>::manage;
|
||||
functor =
|
||||
manager(detail::function::any_pointer(const_cast<FunctionObj*>(&f)),
|
||||
detail::function::clone_functor_tag);
|
||||
detail::function::clone_functor);
|
||||
# endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
typedef result_type (*invoker_type)(detail::function::any_pointer
|
||||
BOOST_FUNCTION_COMMA
|
||||
BOOST_FUNCTION_TEMPLATE_ARGS);
|
||||
|
||||
invoker_type invoker;
|
||||
#endif // BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS
|
||||
};
|
||||
|
||||
template<typename R BOOST_FUNCTION_COMMA BOOST_FUNCTION_TEMPLATE_PARMS ,
|
||||
@ -416,20 +723,8 @@ namespace boost {
|
||||
>& f2)
|
||||
{
|
||||
f1.swap(f2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Cleanup after ourselves...
|
||||
#undef BOOST_FUNCTION_DEFAULT_ALLOCATOR
|
||||
#undef BOOST_FUNCTION_COMMA
|
||||
#undef BOOST_FUNCTION_FUNCTION
|
||||
#undef BOOST_FUNCTION_BASE
|
||||
#undef BOOST_FUNCTION_INVOKER_BASE
|
||||
#undef BOOST_FUNCTION_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_VOID_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_FUNCTION_OBJ_INVOKER
|
||||
#undef BOOST_FUNCTION_GET_MEM_FUNCTION_INVOKER
|
||||
|
||||
#undef BOOST_FUNCTION_INIT
|
||||
|
@ -1,111 +0,0 @@
|
||||
#!/usr/bin/perl -w
|
||||
#
|
||||
# Boost.Function library
|
||||
#
|
||||
# Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
#
|
||||
# Permission to copy, use, sell and distribute this software is granted
|
||||
# provided this copyright notice appears in all copies.
|
||||
# Permission to modify the code and to distribute modified code is granted
|
||||
# provided this copyright notice appears in all copies, and a notice
|
||||
# that the code was modified is included with the copyright notice.
|
||||
#
|
||||
# This software is provided "as is" without express or implied warranty,
|
||||
# and with no claim as to its suitability for any purpose.
|
||||
#
|
||||
# For more information, see http://www.boost.org
|
||||
use English;
|
||||
|
||||
if ($#ARGV < 0) {
|
||||
print "Usage: perl gen_function_N <number of arguments>\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
|
||||
$totalNumArgs = $ARGV[0];
|
||||
for ($numArgs = 0; $numArgs <= $totalNumArgs; ++$numArgs) {
|
||||
open OUT, ">function$numArgs.hpp";
|
||||
print OUT "// Boost.Function library\n";
|
||||
print OUT "//\n";
|
||||
print OUT "// Copyright (C) 2001 Doug Gregor (gregod\@cs.rpi.edu)\n";
|
||||
print OUT "//\n";
|
||||
print OUT "// Permission to copy, use, sell and distribute this software is granted\n";
|
||||
print OUT "// provided this copyright notice appears in all copies.\n";
|
||||
print OUT "// Permission to modify the code and to distribute modified code is granted\n";
|
||||
print OUT "// provided this copyright notice appears in all copies, and a notice\n";
|
||||
print OUT "// that the code was modified is included with the copyright notice.\n";
|
||||
print OUT "//\n";
|
||||
print OUT "// This software is provided \"as is\" without express or implied warranty,\n";
|
||||
print OUT "// and with no claim as to its suitability for any purpose.\n";
|
||||
print OUT " \n";
|
||||
print OUT "// For more information, see http://www.boost.org\n";
|
||||
print OUT "\n";
|
||||
print OUT "#ifndef BOOST_FUNCTION_FUNCTION" . $numArgs . "_HEADER\n";
|
||||
print OUT "#define BOOST_FUNCTION_FUNCTION" , $numArgs . "_HEADER\n";
|
||||
print OUT "\n";
|
||||
print OUT "#define BOOST_FUNCTION_NUM_ARGS $numArgs\n";
|
||||
|
||||
$templateParms = "";
|
||||
for ($i = 0; $i < $numArgs; ++$i) {
|
||||
if ($i > 0) {
|
||||
$templateParms .= ", ";
|
||||
}
|
||||
$templateParms .= "typename T$i";
|
||||
}
|
||||
print OUT "#define BOOST_FUNCTION_TEMPLATE_PARMS $templateParms\n";
|
||||
|
||||
$_ = $templateParms;
|
||||
s/typename //g;
|
||||
$templateArgs = $_;
|
||||
print OUT "#define BOOST_FUNCTION_TEMPLATE_ARGS $templateArgs\n";
|
||||
|
||||
$parms = "";
|
||||
for ($i = 0; $i < $numArgs; ++$i) {
|
||||
if ($i > 0) {
|
||||
$parms .= ", ";
|
||||
}
|
||||
$parms .= "T$i a$i";
|
||||
}
|
||||
print OUT "#define BOOST_FUNCTION_PARMS $parms\n";
|
||||
|
||||
$args = "";
|
||||
for ($i = 0; $i < $numArgs; ++$i) {
|
||||
if ($i > 0) {
|
||||
$args .= ", ";
|
||||
}
|
||||
$args .= "a$i";
|
||||
}
|
||||
print OUT "#define BOOST_FUNCTION_ARGS $args\n";
|
||||
|
||||
$not0Parms = "";
|
||||
for ($i = 1; $i < $numArgs; ++$i) {
|
||||
if ($i > 1) {
|
||||
$not0Parms .= ", ";
|
||||
}
|
||||
$not0Parms .= "T$i a$i";
|
||||
}
|
||||
print OUT "#define BOOST_FUNCTION_NOT_0_PARMS $not0Parms\n";
|
||||
|
||||
$not0Args = "";
|
||||
for ($i = 1; $i < $numArgs; ++$i) {
|
||||
if ($i > 1) {
|
||||
$not0Args .= ", ";
|
||||
}
|
||||
$not0Args .= "a$i";
|
||||
}
|
||||
print OUT "#define BOOST_FUNCTION_NOT_0_ARGS $not0Args\n";
|
||||
|
||||
print OUT "\n";
|
||||
print OUT "#include <boost/function/function_template.hpp>\n";
|
||||
print OUT "\n";
|
||||
print OUT "#undef BOOST_FUNCTION_NOT_0_ARGS\n";
|
||||
print OUT "#undef BOOST_FUNCTION_NOT_0_PARMS\n";
|
||||
print OUT "#undef BOOST_FUNCTION_ARGS\n";
|
||||
print OUT "#undef BOOST_FUNCTION_PARMS\n";
|
||||
print OUT "#undef BOOST_FUNCTION_TEMPLATE_ARGS\n";
|
||||
print OUT "#undef BOOST_FUNCTION_TEMPLATE_PARMS\n";
|
||||
print OUT "#undef BOOST_FUNCTION_NUM_ARGS\n";
|
||||
print OUT "\n";
|
||||
print OUT "#endif // BOOST_FUNCTION_FUNCTION" . $numArgs . "_HEADER\n";
|
||||
close OUT;
|
||||
}
|
@ -80,6 +80,8 @@ And, of course, function pointers have several advantages over Boost.Function:
|
||||
|
||||
<p> In Boost.Function, an alternative but equivalent approach was taken using free functions instead of virtual functions. The Boost.Function object essentially holds two pointers to make a valid target call: a void pointer to the function object it contains and a void pointer to an "invoker" that can call the function object, given the function pointer. This invoker function performs the argument and return value conversions Boost.Function provides. A third pointer points to a free function called the "manager", which handles the cloning and destruction of function objects. The scheme is typesafe because the only functions that actually handle the function object, the invoker and the manager, are instantiated given the type of the function object, so they can safely cast the incoming void pointer (the function object pointer) to the appropriate type.
|
||||
|
||||
<p> A compiler with strong interprocedural analysis could significantly reduce the overhead associated with virtual function calls such that the alternative used by Boost.Function is less efficient. No compiler has yet been found where this is true, but when it does occur the BOOST_FUNCTION_USE_VIRTUAL_FUNCTIONS macro can be defined to revert to the simpler implementation based on virtual functions.
|
||||
|
||||
<h2><a name="acknowledgements">Acknowledgements</a></h2>
|
||||
<p> Many people were involved in the construction of this library. William Kempf, Jesse Jones and Karl Nelson were all extremely helpful in isolating an interface and scope for the library. John Maddock managed the formal review, and many reviewers gave excellent comments on interface, implementation, and documentation.
|
||||
|
||||
|
56
test/defarg_test.cpp
Normal file
56
test/defarg_test.cpp
Normal file
@ -0,0 +1,56 @@
|
||||
// Boost.Function library
|
||||
|
||||
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#define BOOST_INCLUDE_MAIN
|
||||
#include <boost/test/test_tools.hpp>
|
||||
#include <boost/function.hpp>
|
||||
#include <functional>
|
||||
#include <cassert>
|
||||
#include <string>
|
||||
|
||||
using namespace std;
|
||||
using namespace boost;
|
||||
|
||||
static int sub_ints(int x = 5, int y = 3, int z = 1) { return x-y-z; }
|
||||
|
||||
static void
|
||||
test_zero_args()
|
||||
{
|
||||
function<int> one(&sub_ints);
|
||||
BOOST_TEST(one() == 1);
|
||||
}
|
||||
|
||||
static void
|
||||
test_one_arg()
|
||||
{
|
||||
function<int, int> minus_four(&sub_ints);
|
||||
BOOST_TEST(minus_four(7) == 3);
|
||||
}
|
||||
|
||||
static void
|
||||
test_two_args()
|
||||
{
|
||||
function<int, int, int> sub(&sub_ints);
|
||||
BOOST_TEST(sub(10, 2) == 7);
|
||||
}
|
||||
|
||||
int
|
||||
test_main(int, char* [])
|
||||
{
|
||||
test_zero_args();
|
||||
test_one_arg();
|
||||
test_two_args();
|
||||
return 0;
|
||||
}
|
@ -44,15 +44,6 @@ struct write_const_1_nonconst_2
|
||||
void operator()() const { global_int = 1; }
|
||||
};
|
||||
|
||||
struct add_to_obj
|
||||
{
|
||||
add_to_obj(int v) : value(v) {}
|
||||
|
||||
int operator()(int x) const { return value + x; }
|
||||
|
||||
int value;
|
||||
};
|
||||
|
||||
static void
|
||||
test_zero_args()
|
||||
{
|
||||
@ -536,15 +527,8 @@ test_one_arg()
|
||||
function1<string, string> id(&identity_str);
|
||||
BOOST_TEST(id("str") == "str");
|
||||
|
||||
function1<std::string, const char*> id2(&identity_str);
|
||||
function1<std::string, char*> id2(&identity_str);
|
||||
BOOST_TEST(id2("foo") == "foo");
|
||||
|
||||
add_to_obj add_to(5);
|
||||
function1<int, int> f2(add_to);
|
||||
BOOST_TEST(f2(3) == 8);
|
||||
|
||||
const function1<int, int> cf2(add_to);
|
||||
BOOST_TEST(cf2(3) == 8);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -572,44 +556,12 @@ test_emptiness()
|
||||
BOOST_TEST(f3.empty());
|
||||
}
|
||||
|
||||
struct X {
|
||||
X(int v) : value(v) {}
|
||||
|
||||
int twice() const { return 2*value; }
|
||||
int plus(int v) { return value + v; }
|
||||
|
||||
int value;
|
||||
};
|
||||
|
||||
static void
|
||||
test_member_functions()
|
||||
{
|
||||
|
||||
boost::function1<int, X*> f1(&X::twice);
|
||||
|
||||
X one(1);
|
||||
X five(5);
|
||||
|
||||
BOOST_TEST(f1(&one) == 2);
|
||||
BOOST_TEST(f1(&five) == 10);
|
||||
|
||||
boost::function1<int, X*> f1_2;
|
||||
f1_2 = &X::twice;
|
||||
|
||||
BOOST_TEST(f1_2(&one) == 2);
|
||||
BOOST_TEST(f1_2(&five) == 10);
|
||||
|
||||
boost::function2<int, X&, int> f2(&X::plus);
|
||||
BOOST_TEST(f2(one, 3) == 4);
|
||||
BOOST_TEST(f2(five, 4) == 9);
|
||||
}
|
||||
|
||||
int test_main(int, char* [])
|
||||
int
|
||||
test_main(int, char* [])
|
||||
{
|
||||
test_zero_args();
|
||||
test_one_arg();
|
||||
test_two_args();
|
||||
test_emptiness();
|
||||
test_member_functions();
|
||||
return 0;
|
||||
}
|
||||
|
@ -44,15 +44,6 @@ struct write_const_1_nonconst_2
|
||||
void operator()() const { global_int = 1; }
|
||||
};
|
||||
|
||||
struct add_to_obj
|
||||
{
|
||||
add_to_obj(int v) : value(v) {}
|
||||
|
||||
int operator()(int x) const { return value + x; }
|
||||
|
||||
int value;
|
||||
};
|
||||
|
||||
static void
|
||||
test_zero_args()
|
||||
{
|
||||
@ -536,15 +527,8 @@ test_one_arg()
|
||||
function<string, string> id(&identity_str);
|
||||
BOOST_TEST(id("str") == "str");
|
||||
|
||||
function<std::string, const char*> id2(&identity_str);
|
||||
function<std::string, char*> id2(&identity_str);
|
||||
BOOST_TEST(id2("foo") == "foo");
|
||||
|
||||
add_to_obj add_to(5);
|
||||
function<int, int> f2(add_to);
|
||||
BOOST_TEST(f2(3) == 8);
|
||||
|
||||
const function<int, int> cf2(add_to);
|
||||
BOOST_TEST(cf2(3) == 8);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -572,43 +556,12 @@ test_emptiness()
|
||||
BOOST_TEST(f3.empty());
|
||||
}
|
||||
|
||||
struct X {
|
||||
X(int v) : value(v) {}
|
||||
|
||||
int twice() const { return 2*value; }
|
||||
int plus(int v) { return value + v; }
|
||||
|
||||
int value;
|
||||
};
|
||||
|
||||
static void
|
||||
test_member_functions()
|
||||
{
|
||||
boost::function<int, X*> f1(&X::twice);
|
||||
|
||||
X one(1);
|
||||
X five(5);
|
||||
|
||||
BOOST_TEST(f1(&one) == 2);
|
||||
BOOST_TEST(f1(&five) == 10);
|
||||
|
||||
boost::function<int, X*> f1_2;
|
||||
f1_2 = &X::twice;
|
||||
|
||||
BOOST_TEST(f1_2(&one) == 2);
|
||||
BOOST_TEST(f1_2(&five) == 10);
|
||||
|
||||
boost::function<int, X&, int> f2(&X::plus);
|
||||
BOOST_TEST(f2(one, 3) == 4);
|
||||
BOOST_TEST(f2(five, 4) == 9);
|
||||
}
|
||||
|
||||
int test_main(int, char* [])
|
||||
int
|
||||
test_main(int, char* [])
|
||||
{
|
||||
test_zero_args();
|
||||
test_one_arg();
|
||||
test_two_args();
|
||||
test_emptiness();
|
||||
test_member_functions();
|
||||
return 0;
|
||||
}
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
|
||||
run libs/function/test/allocator_test.cpp
|
||||
run libs/function/test/defarg_test.cpp
|
||||
run libs/function/test/function_n_test.cpp
|
||||
run libs/function/test/function_test.cpp
|
||||
compile-fail libs/function/test/function_test_fail1.cpp
|
||||
|
Reference in New Issue
Block a user