File indexing completed on 2025-12-16 09:54:14
0001
0002
0003
0004
0005
0006
0007
0008 #ifndef BOOST_LOCAL_FUNCTION_AUX_NAME_HPP_
0009 #define BOOST_LOCAL_FUNCTION_AUX_NAME_HPP_
0010
0011 #include <boost/local_function/config.hpp>
0012 #include <boost/local_function/aux_/macro/decl.hpp>
0013 #include <boost/local_function/aux_/macro/code_/functor.hpp>
0014 #include <boost/local_function/detail/preprocessor/keyword/recursive.hpp>
0015 #include <boost/local_function/detail/preprocessor/keyword/inline.hpp>
0016 #include <boost/local_function/aux_/function.hpp>
0017 #include <boost/local_function/aux_/symbol.hpp>
0018 #include <boost/preprocessor/control/iif.hpp>
0019 #include <boost/preprocessor/control/expr_iif.hpp>
0020 #include <boost/preprocessor/logical/bitor.hpp>
0021 #include <boost/preprocessor/tuple/eat.hpp>
0022
0023
0024
0025 #define BOOST_LOCAL_FUNCTION_AUX_NAME_LOCAL_TYPE_(local_function_name) \
0026 BOOST_LOCAL_FUNCTION_AUX_SYMBOL( (local_type)(local_function_name) )
0027
0028 #define BOOST_LOCAL_FUNCTION_AUX_NAME_INIT_RECURSION_FUNC_ \
0029 BOOST_LOCAL_FUNCTION_AUX_SYMBOL( (init_recursion) )
0030
0031 #define BOOST_LOCAL_FUNCTION_AUX_NAME_RECURSIVE_FUNC_( \
0032 is_recursive, local_function_name) \
0033 BOOST_PP_IIF(is_recursive, \
0034 local_function_name \
0035 , \
0036 BOOST_LOCAL_FUNCTION_AUX_SYMBOL( (nonrecursive_local_function_name) ) \
0037 )
0038
0039 #define BOOST_LOCAL_FUNCTION_AUX_NAME_END_LOCAL_FUNCTOR_(typename01, \
0040 local_function_name, is_recursive, \
0041 local_functor_name, nonlocal_functor_name) \
0042 \
0043 BOOST_PP_EXPR_IIF(is_recursive, \
0044 \
0045 \
0046 \
0047 \
0048 \
0049 \
0050 \
0051 private: \
0052 BOOST_LOCAL_FUNCTION_AUX_CODE_FUNCTOR_TYPE \
0053 BOOST_LOCAL_FUNCTION_AUX_NAME_RECURSIVE_FUNC_(is_recursive, \
0054 local_function_name); \
0055 \
0056 \
0057 \
0058 public: \
0059 inline void BOOST_LOCAL_FUNCTION_AUX_NAME_INIT_RECURSION_FUNC_( \
0060 BOOST_LOCAL_FUNCTION_AUX_CODE_FUNCTOR_TYPE& functor) { \
0061 local_function_name = functor; \
0062 } \
0063 ) \
0064 } BOOST_LOCAL_FUNCTION_AUX_NAME_LOCAL_TYPE_(local_function_name); \
0065 \
0066 BOOST_LOCAL_FUNCTION_AUX_NAME_LOCAL_TYPE_(local_function_name) \
0067 local_functor_name(BOOST_LOCAL_FUNCTION_AUX_DECL_ARGS_VAR.value); \
0068 \
0069 BOOST_PP_EXPR_IIF(typename01, typename) \
0070 BOOST_LOCAL_FUNCTION_AUX_NAME_LOCAL_TYPE_(local_function_name):: \
0071 BOOST_LOCAL_FUNCTION_AUX_CODE_FUNCTOR_TYPE \
0072 nonlocal_functor_name; \
0073 \
0074 \
0075 \
0076 local_functor_name.BOOST_LOCAL_FUNCTION_AUX_FUNCTION_INIT_CALL_FUNC( \
0077 &local_functor_name, nonlocal_functor_name); \
0078 BOOST_PP_EXPR_IIF(is_recursive, \
0079 \
0080 \
0081 \
0082 local_functor_name.BOOST_LOCAL_FUNCTION_AUX_NAME_INIT_RECURSION_FUNC_( \
0083 nonlocal_functor_name); \
0084 )
0085
0086 #define BOOST_LOCAL_FUNCTION_AUX_NAME_FUNCTOR_(local_function_name) \
0087 BOOST_LOCAL_FUNCTION_AUX_SYMBOL( (local_function_name) )
0088
0089
0090
0091
0092 #define BOOST_LOCAL_FUNCTION_AUX_NAME_(typename01, local_function_name) \
0093 BOOST_LOCAL_FUNCTION_AUX_NAME_END_LOCAL_FUNCTOR_(typename01, \
0094 local_function_name, \
0095 \
0096 \
0097 \
0098 0 , \
0099 \
0100 BOOST_LOCAL_FUNCTION_AUX_NAME_FUNCTOR_(local_function_name), \
0101 \
0102 \
0103 local_function_name)
0104
0105
0106
0107
0108
0109 #define BOOST_LOCAL_FUNCTION_AUX_NAME_INLINE_(typename01, local_function_name) \
0110 BOOST_LOCAL_FUNCTION_AUX_NAME_END_LOCAL_FUNCTOR_(typename01, \
0111 local_function_name, \
0112 \
0113 \
0114 0 , \
0115 \
0116 \
0117 \
0118 local_function_name, \
0119 \
0120 BOOST_LOCAL_FUNCTION_AUX_NAME_FUNCTOR_(local_function_name))
0121
0122
0123
0124
0125 #define BOOST_LOCAL_FUNCTION_AUX_NAME_RECURSIVE_( \
0126 typename01, local_function_name) \
0127 BOOST_LOCAL_FUNCTION_AUX_NAME_END_LOCAL_FUNCTOR_(typename01, \
0128 local_function_name, \
0129 \
0130 1 , \
0131 \
0132 BOOST_LOCAL_FUNCTION_AUX_NAME_FUNCTOR_(local_function_name), \
0133 \
0134 \
0135 local_function_name)
0136
0137
0138
0139
0140
0141 #define BOOST_LOCAL_FUNCTION_AUX_NAME_PARSE_INLINE_( \
0142 typename01, qualified_name) \
0143 BOOST_PP_IIF(BOOST_PP_BITOR( \
0144 BOOST_LOCAL_FUNCTION_CONFIG_LOCALS_AS_TPARAMS, \
0145 BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_IS_INLINE_FRONT( \
0146 qualified_name)), \
0147 \
0148 \
0149 BOOST_LOCAL_FUNCTION_AUX_NAME_INLINE_ \
0150 , \
0151 \
0152 \
0153 \
0154 BOOST_LOCAL_FUNCTION_AUX_NAME_ \
0155 )(typename01, BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_INLINE_REMOVE_FRONT( \
0156 qualified_name))
0157
0158
0159
0160 #define BOOST_LOCAL_FUNCTION_AUX_NAME_IS_RECURSIVE_(qualified_name) \
0161 BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_IS_RECURSIVE_FRONT( \
0162 BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_INLINE_REMOVE_FRONT( \
0163 qualified_name \
0164 ))
0165
0166
0167 #define BOOST_LOCAL_FUNCTION_AUX_NAME_REMOVE_RECURSIVE_AND_INLINE_( \
0168 qualified_name) \
0169 BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_RECURSIVE_REMOVE_FRONT( \
0170 BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_INLINE_REMOVE_FRONT( \
0171 BOOST_LOCAL_FUNCTION_DETAIL_PP_KEYWORD_RECURSIVE_REMOVE_FRONT( \
0172 qualified_name \
0173 )))
0174
0175 #define BOOST_LOCAL_FUNCTION_AUX_NAME_RECURSIVE_REMOVE_(qualified_name) \
0176 BOOST_PP_IIF(BOOST_LOCAL_FUNCTION_AUX_NAME_IS_RECURSIVE_(qualified_name), \
0177 BOOST_LOCAL_FUNCTION_AUX_NAME_REMOVE_RECURSIVE_AND_INLINE_ \
0178 , \
0179 qualified_name \
0180 BOOST_PP_TUPLE_EAT(1) \
0181 )(qualified_name)
0182
0183
0184
0185 #define BOOST_LOCAL_FUNCTION_AUX_NAME_PARSE_RECURSIVE_( \
0186 typename01, qualified_name) \
0187 BOOST_PP_IIF(BOOST_LOCAL_FUNCTION_AUX_NAME_IS_RECURSIVE_(qualified_name), \
0188 \
0189 BOOST_LOCAL_FUNCTION_AUX_NAME_RECURSIVE_ \
0190 , \
0191 BOOST_LOCAL_FUNCTION_AUX_NAME_PARSE_INLINE_ \
0192 )(typename01, \
0193 BOOST_LOCAL_FUNCTION_AUX_NAME_RECURSIVE_REMOVE_(qualified_name))
0194
0195
0196
0197 #define BOOST_LOCAL_FUNCTION_AUX_NAME(typename01, qualified_name) \
0198 BOOST_LOCAL_FUNCTION_AUX_NAME_PARSE_RECURSIVE_(typename01, qualified_name)
0199
0200 #endif
0201