mirror of
https://github.com/bolero-MURAKAMI/Sprout
synced 2024-11-12 21:09:01 +00:00
add variadic assert macro
This commit is contained in:
parent
15c3f55ebb
commit
23be867d87
7 changed files with 307 additions and 93 deletions
|
@ -10,12 +10,21 @@
|
|||
|
||||
#if defined(SPROUT_DISABLE_ASSERTS) || defined(NDEBUG)
|
||||
# include <sprout/config.hpp>
|
||||
# include <sprout/preprocessor/config.hpp>
|
||||
# include <sprout/preprocessor/cat.hpp>
|
||||
# include <sprout/preprocessor/variadic/size.hpp>
|
||||
#elif defined(SPROUT_ENABLE_ASSERT_HANDLER)
|
||||
# include <sprout/config.hpp>
|
||||
# include <sprout/preprocessor/config.hpp>
|
||||
# include <sprout/preprocessor/cat.hpp>
|
||||
# include <sprout/preprocessor/variadic/size.hpp>
|
||||
#else
|
||||
# include <cstdlib>
|
||||
# include <iostream>
|
||||
# include <sprout/config.hpp>
|
||||
# include <sprout/preprocessor/config.hpp>
|
||||
# include <sprout/preprocessor/cat.hpp>
|
||||
# include <sprout/preprocessor/variadic/size.hpp>
|
||||
#endif
|
||||
#if !(defined(SPROUT_DISABLE_ASSERTS) || defined(NDEBUG))
|
||||
# include <sprout/preprocessor/stringize.hpp>
|
||||
|
@ -29,99 +38,6 @@
|
|||
"***** Internal Program Error - assertion (" #expr ") failed: " file "(" SPROUT_PP_STRINGIZE(line) ")"
|
||||
#endif
|
||||
|
||||
//
|
||||
// SPROUT_ASSERT
|
||||
//
|
||||
|
||||
#if defined(SPROUT_DISABLE_ASSERTS) || defined(NDEBUG)
|
||||
|
||||
# define SPROUT_ASSERT(expr) \
|
||||
((void)0)
|
||||
|
||||
#elif defined(SPROUT_ENABLE_ASSERT_HANDLER)
|
||||
|
||||
namespace sprout {
|
||||
//
|
||||
// assertion_info
|
||||
//
|
||||
class assertion_info {
|
||||
private:
|
||||
char const* expr_;
|
||||
char const* function_;
|
||||
char const* file_;
|
||||
long line_;
|
||||
public:
|
||||
SPROUT_CONSTEXPR assertion_info(char const* expr, char const* function, char const* file, long line)
|
||||
: expr_(expr), function_(function), file_(file), line_(line)
|
||||
{}
|
||||
SPROUT_CONSTEXPR char const* expr() const SPROUT_NOEXCEPT {
|
||||
return expr_;
|
||||
}
|
||||
SPROUT_CONSTEXPR char const* function() const SPROUT_NOEXCEPT {
|
||||
return function_;
|
||||
}
|
||||
SPROUT_CONSTEXPR char const* file() const SPROUT_NOEXCEPT {
|
||||
return file_;
|
||||
}
|
||||
SPROUT_CONSTEXPR long line() const SPROUT_NOEXCEPT {
|
||||
return line_;
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
// assertion_failed
|
||||
// * user defined
|
||||
//
|
||||
void
|
||||
assertion_failed(sprout::assertion_info const&);
|
||||
} // namespace sprout
|
||||
|
||||
namespace sprout {
|
||||
namespace detail {
|
||||
inline bool
|
||||
assertion_failed(bool cond, char const* formatted, char const* expr, char const* function, char const* file, long line) {
|
||||
return cond ? true
|
||||
: ((void)sprout::assertion_failed(sprout::assertion_info(expr, function, file, line)), false)
|
||||
;
|
||||
}
|
||||
inline SPROUT_CONSTEXPR bool
|
||||
assertion_check(bool cond, char const* formatted, char const* expr, char const* function, char const* file, long line) {
|
||||
return cond ? true
|
||||
: sprout::detail::assertion_failed(cond, formatted, expr, function, file, line)
|
||||
;
|
||||
}
|
||||
} // namespace detail
|
||||
} // namespace sprout
|
||||
|
||||
# define SPROUT_ASSERT(expr) ( \
|
||||
(void)sprout::detail::assertion_check( \
|
||||
(expr), SPROUT_ASSERTION_FAILED_FORMAT(expr, __FILE__, __LINE__), \
|
||||
#expr, "(unknown)"/*SPROUT_CURRENT_FUNCTION*/, __FILE__, __LINE__ \
|
||||
) \
|
||||
)
|
||||
|
||||
#else
|
||||
|
||||
namespace sprout {
|
||||
namespace detail {
|
||||
inline bool
|
||||
assertion_failed(char const* formatted) {
|
||||
return (std::cerr << formatted << std::endl), std::abort(), false;
|
||||
}
|
||||
inline SPROUT_CONSTEXPR bool
|
||||
assertion_check(bool cond, char const* formatted) {
|
||||
return cond ? true
|
||||
: sprout::detail::assertion_failed(formatted)
|
||||
;
|
||||
}
|
||||
} // namespace detail
|
||||
} // namespace sprout
|
||||
|
||||
# define SPROUT_ASSERT(expr) \
|
||||
((void)sprout::detail::assertion_check((expr), SPROUT_ASSERTION_FAILED_FORMAT(expr, __FILE__, __LINE__)))
|
||||
|
||||
#endif
|
||||
|
||||
//
|
||||
// SPROUT_ASSERT_MSG
|
||||
//
|
||||
|
@ -219,6 +135,109 @@ namespace sprout {
|
|||
|
||||
#endif
|
||||
|
||||
//
|
||||
// SPROUT_ASSERT
|
||||
//
|
||||
|
||||
#if defined(SPROUT_DISABLE_ASSERTS) || defined(NDEBUG)
|
||||
|
||||
# define SPROUT_ASSERT_1(expr) \
|
||||
((void)0)
|
||||
|
||||
#elif defined(SPROUT_ENABLE_ASSERT_HANDLER)
|
||||
|
||||
namespace sprout {
|
||||
//
|
||||
// assertion_info
|
||||
//
|
||||
class assertion_info {
|
||||
private:
|
||||
char const* expr_;
|
||||
char const* function_;
|
||||
char const* file_;
|
||||
long line_;
|
||||
public:
|
||||
SPROUT_CONSTEXPR assertion_info(char const* expr, char const* function, char const* file, long line)
|
||||
: expr_(expr), function_(function), file_(file), line_(line)
|
||||
{}
|
||||
SPROUT_CONSTEXPR char const* expr() const SPROUT_NOEXCEPT {
|
||||
return expr_;
|
||||
}
|
||||
SPROUT_CONSTEXPR char const* function() const SPROUT_NOEXCEPT {
|
||||
return function_;
|
||||
}
|
||||
SPROUT_CONSTEXPR char const* file() const SPROUT_NOEXCEPT {
|
||||
return file_;
|
||||
}
|
||||
SPROUT_CONSTEXPR long line() const SPROUT_NOEXCEPT {
|
||||
return line_;
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
// assertion_failed
|
||||
// * user defined
|
||||
//
|
||||
void
|
||||
assertion_failed(sprout::assertion_info const&);
|
||||
} // namespace sprout
|
||||
|
||||
namespace sprout {
|
||||
namespace detail {
|
||||
inline bool
|
||||
assertion_failed(bool cond, char const* formatted, char const* expr, char const* function, char const* file, long line) {
|
||||
return cond ? true
|
||||
: ((void)sprout::assertion_failed(sprout::assertion_info(expr, function, file, line)), false)
|
||||
;
|
||||
}
|
||||
inline SPROUT_CONSTEXPR bool
|
||||
assertion_check(bool cond, char const* formatted, char const* expr, char const* function, char const* file, long line) {
|
||||
return cond ? true
|
||||
: sprout::detail::assertion_failed(cond, formatted, expr, function, file, line)
|
||||
;
|
||||
}
|
||||
} // namespace detail
|
||||
} // namespace sprout
|
||||
|
||||
# define SPROUT_ASSERT_1(expr) \
|
||||
(void)sprout::detail::assertion_check( \
|
||||
(expr), SPROUT_ASSERTION_FAILED_FORMAT(expr, __FILE__, __LINE__), \
|
||||
#expr, "(unknown)"/*SPROUT_CURRENT_FUNCTION*/, __FILE__, __LINE__ \
|
||||
) \
|
||||
)
|
||||
|
||||
#else
|
||||
|
||||
namespace sprout {
|
||||
namespace detail {
|
||||
inline bool
|
||||
assertion_failed(char const* formatted) {
|
||||
return (std::cerr << formatted << std::endl), std::abort(), false;
|
||||
}
|
||||
inline SPROUT_CONSTEXPR bool
|
||||
assertion_check(bool cond, char const* formatted) {
|
||||
return cond ? true
|
||||
: sprout::detail::assertion_failed(formatted)
|
||||
;
|
||||
}
|
||||
} // namespace detail
|
||||
} // namespace sprout
|
||||
|
||||
# define SPROUT_ASSERT_1(expr) \
|
||||
((void)sprout::detail::assertion_check((expr), SPROUT_ASSERTION_FAILED_FORMAT(expr, __FILE__, __LINE__)))
|
||||
|
||||
#endif
|
||||
|
||||
#if SPROUT_PP_VARIADICS
|
||||
# define SPROUT_ASSERT_2(expr, msg) \
|
||||
SPROUT_ASSERT_MSG(expr, msg)
|
||||
# define SPROUT_ASSERT(__VA_ARGS__) \
|
||||
SPROUT_PP_CAT(SPROUT_ASSERT_, SPROUT_PP_VARIADIC_SIZE(__VA_ARGS__))(__VA_ARGS__)
|
||||
#else
|
||||
# define SPROUT_ASSERT(expr) \
|
||||
SPROUT_ASSERT_1(expr)
|
||||
#endif
|
||||
|
||||
//
|
||||
// SPROUT_VERIFY
|
||||
//
|
||||
|
|
|
@ -34,12 +34,25 @@ namespace sprout {
|
|||
&& sprout::has_second_argument_type<Fn>::value
|
||||
>
|
||||
{};
|
||||
//
|
||||
// is_strict_function
|
||||
//
|
||||
template<typename Fn>
|
||||
struct is_strict_function
|
||||
: public sprout::integral_constant<
|
||||
bool,
|
||||
sprout::is_strict_unary_function<Fn>::value
|
||||
|| sprout::is_strict_binary_function<Fn>::value
|
||||
>
|
||||
{};
|
||||
|
||||
#if SPROUT_USE_VARIABLE_TEMPLATES
|
||||
template<typename T>
|
||||
SPROUT_STATIC_CONSTEXPR bool is_strict_unary_function_v = sprout::is_strict_unary_function<T>::value;
|
||||
template<typename T>
|
||||
SPROUT_STATIC_CONSTEXPR bool is_strict_binary_function_v = sprout::is_strict_binary_function<T>::value;
|
||||
template<typename T>
|
||||
SPROUT_STATIC_CONSTEXPR bool is_strict_function_v = sprout::is_strict_function<T>::value;
|
||||
#endif // #if SPROUT_USE_VARIABLE_TEMPLATES
|
||||
} // namespace sprout
|
||||
|
||||
|
|
|
@ -9,11 +9,13 @@
|
|||
#define SPROUT_PREPROCESSOR_HPP
|
||||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/preprocessor/config.hpp>
|
||||
#include <sprout/preprocessor/cat.hpp>
|
||||
#include <sprout/preprocessor/stringize_all.hpp>
|
||||
#include <sprout/preprocessor/str_all.hpp>
|
||||
#include <sprout/preprocessor/unique_string.hpp>
|
||||
#include <sprout/preprocessor/empty.hpp>
|
||||
#include <sprout/preprocessor/some_number.hpp>
|
||||
#include <sprout/preprocessor/variadic.hpp>
|
||||
|
||||
#endif // #ifndef SPROUT_PREPROCESSOR_HPP
|
||||
|
|
47
sprout/preprocessor/config.hpp
Normal file
47
sprout/preprocessor/config.hpp
Normal file
|
@ -0,0 +1,47 @@
|
|||
/*=============================================================================
|
||||
Copyright (c) 2011-2014 Bolero MURAKAMI
|
||||
https://github.com/bolero-MURAKAMI/Sprout
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
=============================================================================*/
|
||||
#ifndef SPROUT_PREPROCESSOR_CONFIG_HPP
|
||||
#define SPROUT_PREPROCESSOR_CONFIG_HPP
|
||||
|
||||
#include <sprout/config.hpp>
|
||||
|
||||
//
|
||||
// SPROUT_PP_VARIADICS
|
||||
//
|
||||
#if !defined(SPROUT_PP_VARIADICS)
|
||||
# if defined(__GCCXML__) || defined(__CUDACC__) || defined(__PATHSCALE__) || defined(__clang__) || defined(__DMC__) || defined(__CODEGEARC__) || defined(__BORLANDC__) || defined(__MWERKS__) || defined(__SUNPRO_CC) || (defined(__HP_aCC) && !defined(__EDG__)) || defined(__MRC__) || defined(__SC__) || defined(__IBMCPP__) || defined(__PGI)
|
||||
# define SPROUT_PP_VARIADICS 0
|
||||
# /* VC++ (C/C++) */
|
||||
# elif defined(_MSC_VER) && _MSC_VER >= 1400 && !defined(__EDG__)
|
||||
# if _MSC_VER >= 1400
|
||||
# define SPROUT_PP_VARIADICS 1
|
||||
# define SPROUT_PP_VARIADICS_MSVC 1
|
||||
# else
|
||||
# define SPROUT_PP_VARIADICS 0
|
||||
# endif
|
||||
# /* Wave (C/C++), GCC (C++) */
|
||||
# elif defined(__WAVE__) && __WAVE_HAS_VARIADICS__ || defined(__GNUC__) && __GXX_EXPERIMENTAL_CXX0X__
|
||||
# define SPROUT_PP_VARIADICS 1
|
||||
# /* EDG-based (C/C++), GCC (C), and unknown (C/C++) */
|
||||
# elif !defined(__cplusplus) && __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L
|
||||
# define SPROUT_PP_VARIADICS 1
|
||||
# else
|
||||
# define SPROUT_PP_VARIADICS 0
|
||||
# endif
|
||||
#elif !SPROUT_PP_VARIADICS + 1 < 2
|
||||
# undef SPROUT_PP_VARIADICS
|
||||
# define SPROUT_PP_VARIADICS 1
|
||||
# if (defined(_MSC_VER) && _MSC_VER >= 1400 && !(defined(__EDG__)) || defined(__GCCXML__) || defined(__CUDACC__) || defined(__PATHSCALE__) || defined(__clang__) || defined(__DMC__) || defined(__CODEGEARC__) || defined(__BORLANDC__) || defined(__MWERKS__) || defined(__SUNPRO_CC) || defined(__HP_aCC) || defined(__MRC__) || defined(__SC__) || defined(__IBMCPP__) || defined(__PGI))
|
||||
# define SPROUT_PP_VARIADICS_MSVC 1
|
||||
# endif
|
||||
#else
|
||||
# undef SPROUT_PP_VARIADICS
|
||||
# define SPROUT_PP_VARIADICS 0
|
||||
#endif
|
||||
|
||||
#endif // #ifndef SPROUT_PREPROCESSOR_CONFIG_HPP
|
15
sprout/preprocessor/variadic.hpp
Normal file
15
sprout/preprocessor/variadic.hpp
Normal file
|
@ -0,0 +1,15 @@
|
|||
/*=============================================================================
|
||||
Copyright (c) 2011-2014 Bolero MURAKAMI
|
||||
https://github.com/bolero-MURAKAMI/Sprout
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
=============================================================================*/
|
||||
#ifndef SPROUT_PREPROCESSOR_VARIADIC_HPP
|
||||
#define SPROUT_PREPROCESSOR_VARIADIC_HPP
|
||||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/preprocessor/variadic/size.hpp>
|
||||
#include <sprout/preprocessor/variadic/elem.hpp>
|
||||
|
||||
#endif // #ifndef SPROUT_PREPROCESSOR_VARIADIC_HPP
|
91
sprout/preprocessor/variadic/elem.hpp
Normal file
91
sprout/preprocessor/variadic/elem.hpp
Normal file
|
@ -0,0 +1,91 @@
|
|||
/*=============================================================================
|
||||
Copyright (c) 2011-2014 Bolero MURAKAMI
|
||||
https://github.com/bolero-MURAKAMI/Sprout
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
=============================================================================*/
|
||||
#ifndef SPROUT_PREPROCESSOR_VARIADIC_ELEM_HPP
|
||||
#define SPROUT_PREPROCESSOR_VARIADIC_ELEM_HPP
|
||||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/preprocessor/config.hpp>
|
||||
#include <sprout/preprocessor/cat.hpp>
|
||||
|
||||
//
|
||||
// SPROUT_PP_VARIADIC_ELEM
|
||||
//
|
||||
#if SPROUT_PP_VARIADICS
|
||||
# if SPROUT_PP_VARIADICS_MSVC
|
||||
# define SPROUT_PP_VARIADIC_ELEM(n, ...) SPROUT_PP_VARIADIC_ELEM_I(n, __VA_ARGS__)
|
||||
# define SPROUT_PP_VARIADIC_ELEM_I(n, ...) SPROUT_PP_CAT(SPROUT_PP_CAT(SPROUT_PP_VARIADIC_ELEM_, n)(__VA_ARGS__, ), )
|
||||
# else
|
||||
# define SPROUT_PP_VARIADIC_ELEM(n, ...) SPROUT_PP_CAT(SPROUT_PP_VARIADIC_ELEM_, n)(__VA_ARGS__, )
|
||||
# endif
|
||||
# define SPROUT_PP_VARIADIC_ELEM_0(e0, ...) e0
|
||||
# define SPROUT_PP_VARIADIC_ELEM_1(e0, e1, ...) e1
|
||||
# define SPROUT_PP_VARIADIC_ELEM_2(e0, e1, e2, ...) e2
|
||||
# define SPROUT_PP_VARIADIC_ELEM_3(e0, e1, e2, e3, ...) e3
|
||||
# define SPROUT_PP_VARIADIC_ELEM_4(e0, e1, e2, e3, e4, ...) e4
|
||||
# define SPROUT_PP_VARIADIC_ELEM_5(e0, e1, e2, e3, e4, e5, ...) e5
|
||||
# define SPROUT_PP_VARIADIC_ELEM_6(e0, e1, e2, e3, e4, e5, e6, ...) e6
|
||||
# define SPROUT_PP_VARIADIC_ELEM_7(e0, e1, e2, e3, e4, e5, e6, e7, ...) e7
|
||||
# define SPROUT_PP_VARIADIC_ELEM_8(e0, e1, e2, e3, e4, e5, e6, e7, e8, ...) e8
|
||||
# define SPROUT_PP_VARIADIC_ELEM_9(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, ...) e9
|
||||
# define SPROUT_PP_VARIADIC_ELEM_10(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, ...) e10
|
||||
# define SPROUT_PP_VARIADIC_ELEM_11(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, ...) e11
|
||||
# define SPROUT_PP_VARIADIC_ELEM_12(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, ...) e12
|
||||
# define SPROUT_PP_VARIADIC_ELEM_13(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, ...) e13
|
||||
# define SPROUT_PP_VARIADIC_ELEM_14(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, ...) e14
|
||||
# define SPROUT_PP_VARIADIC_ELEM_15(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, ...) e15
|
||||
# define SPROUT_PP_VARIADIC_ELEM_16(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, ...) e16
|
||||
# define SPROUT_PP_VARIADIC_ELEM_17(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, ...) e17
|
||||
# define SPROUT_PP_VARIADIC_ELEM_18(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, ...) e18
|
||||
# define SPROUT_PP_VARIADIC_ELEM_19(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, ...) e19
|
||||
# define SPROUT_PP_VARIADIC_ELEM_20(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, ...) e20
|
||||
# define SPROUT_PP_VARIADIC_ELEM_21(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, ...) e21
|
||||
# define SPROUT_PP_VARIADIC_ELEM_22(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, ...) e22
|
||||
# define SPROUT_PP_VARIADIC_ELEM_23(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, ...) e23
|
||||
# define SPROUT_PP_VARIADIC_ELEM_24(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, ...) e24
|
||||
# define SPROUT_PP_VARIADIC_ELEM_25(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, ...) e25
|
||||
# define SPROUT_PP_VARIADIC_ELEM_26(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, ...) e26
|
||||
# define SPROUT_PP_VARIADIC_ELEM_27(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, ...) e27
|
||||
# define SPROUT_PP_VARIADIC_ELEM_28(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, ...) e28
|
||||
# define SPROUT_PP_VARIADIC_ELEM_29(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, ...) e29
|
||||
# define SPROUT_PP_VARIADIC_ELEM_30(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, ...) e30
|
||||
# define SPROUT_PP_VARIADIC_ELEM_31(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, ...) e31
|
||||
# define SPROUT_PP_VARIADIC_ELEM_32(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, ...) e32
|
||||
# define SPROUT_PP_VARIADIC_ELEM_33(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, ...) e33
|
||||
# define SPROUT_PP_VARIADIC_ELEM_34(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, ...) e34
|
||||
# define SPROUT_PP_VARIADIC_ELEM_35(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, ...) e35
|
||||
# define SPROUT_PP_VARIADIC_ELEM_36(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, ...) e36
|
||||
# define SPROUT_PP_VARIADIC_ELEM_37(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, ...) e37
|
||||
# define SPROUT_PP_VARIADIC_ELEM_38(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, ...) e38
|
||||
# define SPROUT_PP_VARIADIC_ELEM_39(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, ...) e39
|
||||
# define SPROUT_PP_VARIADIC_ELEM_40(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, ...) e40
|
||||
# define SPROUT_PP_VARIADIC_ELEM_41(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, ...) e41
|
||||
# define SPROUT_PP_VARIADIC_ELEM_42(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, ...) e42
|
||||
# define SPROUT_PP_VARIADIC_ELEM_43(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, ...) e43
|
||||
# define SPROUT_PP_VARIADIC_ELEM_44(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, ...) e44
|
||||
# define SPROUT_PP_VARIADIC_ELEM_45(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, ...) e45
|
||||
# define SPROUT_PP_VARIADIC_ELEM_46(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, ...) e46
|
||||
# define SPROUT_PP_VARIADIC_ELEM_47(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, ...) e47
|
||||
# define SPROUT_PP_VARIADIC_ELEM_48(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, ...) e48
|
||||
# define SPROUT_PP_VARIADIC_ELEM_49(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, ...) e49
|
||||
# define SPROUT_PP_VARIADIC_ELEM_50(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, ...) e50
|
||||
# define SPROUT_PP_VARIADIC_ELEM_51(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, ...) e51
|
||||
# define SPROUT_PP_VARIADIC_ELEM_52(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, ...) e52
|
||||
# define SPROUT_PP_VARIADIC_ELEM_53(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, ...) e53
|
||||
# define SPROUT_PP_VARIADIC_ELEM_54(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, ...) e54
|
||||
# define SPROUT_PP_VARIADIC_ELEM_55(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, ...) e55
|
||||
# define SPROUT_PP_VARIADIC_ELEM_56(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, ...) e56
|
||||
# define SPROUT_PP_VARIADIC_ELEM_57(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, ...) e57
|
||||
# define SPROUT_PP_VARIADIC_ELEM_58(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, ...) e58
|
||||
# define SPROUT_PP_VARIADIC_ELEM_59(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, ...) e59
|
||||
# define SPROUT_PP_VARIADIC_ELEM_60(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, ...) e60
|
||||
# define SPROUT_PP_VARIADIC_ELEM_61(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, ...) e61
|
||||
# define SPROUT_PP_VARIADIC_ELEM_62(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, ...) e62
|
||||
# define SPROUT_PP_VARIADIC_ELEM_63(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63, ...) e63
|
||||
#endif // #if SPROUT_PP_VARIADICS
|
||||
|
||||
#endif // #ifndef SPROUT_PREPROCESSOR_VARIADIC_ELEM_HPP
|
27
sprout/preprocessor/variadic/size.hpp
Normal file
27
sprout/preprocessor/variadic/size.hpp
Normal file
|
@ -0,0 +1,27 @@
|
|||
/*=============================================================================
|
||||
Copyright (c) 2011-2014 Bolero MURAKAMI
|
||||
https://github.com/bolero-MURAKAMI/Sprout
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0. (See accompanying
|
||||
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
=============================================================================*/
|
||||
#ifndef SPROUT_PREPROCESSOR_VARIADIC_SIZE_HPP
|
||||
#define SPROUT_PREPROCESSOR_VARIADIC_SIZE_HPP
|
||||
|
||||
#include <sprout/config.hpp>
|
||||
#include <sprout/preprocessor/config.hpp>
|
||||
#include <sprout/preprocessor/cat.hpp>
|
||||
|
||||
//
|
||||
// SPROUT_PP_VARIADIC_SIZE
|
||||
//
|
||||
#if SPROUT_PP_VARIADICS
|
||||
# if SPROUT_PP_VARIADICS_MSVC
|
||||
# define SPROUT_PP_VARIADIC_SIZE(...) SPROUT_PP_CAT(SPROUT_PP_VARIADIC_SIZE_I(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,),)
|
||||
# else
|
||||
# define SPROUT_PP_VARIADIC_SIZE(...) SPROUT_PP_VARIADIC_SIZE_I(__VA_ARGS__, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,)
|
||||
# endif
|
||||
# define SPROUT_PP_VARIADIC_SIZE_I(e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25, e26, e27, e28, e29, e30, e31, e32, e33, e34, e35, e36, e37, e38, e39, e40, e41, e42, e43, e44, e45, e46, e47, e48, e49, e50, e51, e52, e53, e54, e55, e56, e57, e58, e59, e60, e61, e62, e63, size, ...) size
|
||||
#endif // #if SPROUT_PP_VARIADICS
|
||||
|
||||
#endif // #ifndef SPROUT_PREPROCESSOR_VARIADIC_SIZE_HPP
|
Loading…
Reference in a new issue