diff options
Diffstat (limited to 'boost/local_function/config.hpp')
-rw-r--r-- | boost/local_function/config.hpp | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/boost/local_function/config.hpp b/boost/local_function/config.hpp new file mode 100644 index 0000000000..bab295378d --- /dev/null +++ b/boost/local_function/config.hpp @@ -0,0 +1,114 @@ + +// Copyright (C) 2009-2012 Lorenzo Caminiti +// Distributed under the Boost Software License, Version 1.0 +// (see accompanying file LICENSE_1_0.txt or a copy at +// http://www.boost.org/LICENSE_1_0.txt) +// Home at http://www.boost.org/libs/local_function + +#ifndef BOOST_LOCAL_FUNCTION_CONFIG_HPP_ +#define BOOST_LOCAL_FUNCTION_CONFIG_HPP_ + +#ifndef DOXYGEN + +#include <boost/config.hpp> + +#ifndef BOOST_LOCAL_FUNCTION_CONFIG_FUNCTION_ARITY_MAX +# define BOOST_LOCAL_FUNCTION_CONFIG_FUNCTION_ARITY_MAX 5 +#endif + +#ifndef BOOST_LOCAL_FUNCTION_CONFIG_BIND_MAX +# define BOOST_LOCAL_FUNCTION_CONFIG_BIND_MAX 10 +#endif + +#ifndef BOOST_LOCAL_FUNCTION_CONFIG_LOCALS_AS_TPARAMS +# ifdef BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS +# define BOOST_LOCAL_FUNCTION_CONFIG_LOCALS_AS_TPARAMS 0 +# else +# define BOOST_LOCAL_FUNCTION_CONFIG_LOCALS_AS_TPARAMS 1 +# endif +#elif BOOST_LOCAL_FUNCTION_CONFIG_LOCALS_AS_TPARAMS // If true, force it to 1. +# undef BOOST_LOCAL_FUNCTION_CONFIG_LOCALS_AS_TPARAMS +# define BOOST_LOCAL_FUNCTION_CONFIG_LOCALS_AS_TPARAMS 1 +#endif + +#else // DOXYGEN + +/** @file +@brief Configuration macros allow to change the behaviour of this library at +compile-time. +*/ + +/** +@brief Maximum number of parameters supported by local functions. + +If programmers leave this configuration macro undefined, its default +value is <c>5</c> (increasing this number might increase compilation time). +When defined by programmers, this macro must be a non-negative integer number. + +@Note This macro specifies the maximum number of local function parameters +excluding bound variables (which are instead specified by +@RefMacro{BOOST_LOCAL_FUNCTION_CONFIG_BIND_MAX}). + +@See @RefSect{tutorial, Tutorial} section, +@RefSect{getting_started, Getting Started} section, +@RefMacro{BOOST_LOCAL_FUNCTION_CONFIG_BIND_MAX}. +*/ +#define BOOST_LOCAL_FUNCTION_CONFIG_ARITY_MAX + +/** +@brief Maximum number of bound variables supported by local functions. + +If programmers leave this configuration macro undefined, its default +value is <c>10</c> (increasing this number might increase compilation time). +When defined by programmers, this macro must be a non-negative integer number. + +@Note This macro specifies the maximum number of bound variables excluding +local function parameters (which are instead specified by +@RefMacro{BOOST_LOCAL_FUNCTION_CONFIG_ARITY_MAX}). + +@See @RefSect{tutorial, Tutorial} section, +@RefSect{getting_started, Getting Started} section, +@RefMacro{BOOST_LOCAL_FUNCTION_CONFIG_ARITY_MAX}. +*/ +#define BOOST_LOCAL_FUNCTION_CONFIG_BIND_MAX + +/** +@brief Specify when local functions can be passed as template parameters +without introducing any run-time overhead. + +If this macro is defined to <c>1</c>, this library will assume that the +compiler allows to pass local classes as template parameters: +@code + template<typename T> void f(void) {} + + int main(void) { + struct local_class {}; + f<local_class>(); + return 0; + } +@endcode +This is the case for C++11 compilers and some C++03 compilers (e.g., MSVC), but +it is not the case in general for most C++03 compilers (including GCC). +This will allow the library to pass local functions as template parameters +without introducing any run-time overhead (specifically without preventing the +compiler from optimizing local function calls by inlining their assembly code). + +If this macro is defined to <c>0</c> instead, this library will introduce +a run-time overhead associated to resolving a function pointer call in order to +still allow to pass the local functions as template parameters. + +It is recommended to leave this macro undefined. +In this case, the library will automatically define this macro to <c>0</c> if +the Boost.Config macro <c>BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS</c> is +defined for the specific compiler, and to <c>1</c> otherwise. + +@See @RefSect{getting_started, Getting Started} section, +@RefSect{advanced_topics, Advanced Topics} section, +@RefMacro{BOOST_LOCAL_FUNCTION_NAME}. +*/ +#define BOOST_LOCAL_FUNCTION_CONFIG_LOCALS_AS_TPARAMS + +#endif // DOXYGEN + +#endif // #include guard + |