]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/accumulators/accumulators_fwd.hpp
bump version to 18.2.2-pve1
[ceph.git] / ceph / src / boost / boost / accumulators / accumulators_fwd.hpp
1 ///////////////////////////////////////////////////////////////////////////////
2 // accumulators_fwd.hpp
3 //
4 // Copyright 2005 Eric Niebler. Distributed under the Boost
5 // Software License, Version 1.0. (See accompanying file
6 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7
8 #ifndef BOOST_ACCUMULATORS_ACCUMULATORS_FWD_HPP_EAN_28_10_2005
9 #define BOOST_ACCUMULATORS_ACCUMULATORS_FWD_HPP_EAN_28_10_2005
10
11 #include <boost/config.hpp>
12 #include <boost/core/enable_if.hpp>
13 #include <boost/parameter/is_argument_pack.hpp>
14 #include <boost/mpl/apply_fwd.hpp> // for mpl::na
15 #include <boost/mpl/limits/vector.hpp>
16 #include <boost/preprocessor/cat.hpp>
17 #include <boost/preprocessor/arithmetic/inc.hpp>
18 #include <boost/preprocessor/repetition/enum_params_with_a_default.hpp>
19 #include <boost/preprocessor/repetition/enum_trailing_params.hpp>
20 #include <boost/preprocessor/repetition/enum_trailing_binary_params.hpp>
21 #include <boost/preprocessor/repetition/repeat_from_to.hpp>
22 #include <boost/accumulators/numeric/functional_fwd.hpp>
23
24 #ifndef BOOST_ACCUMULATORS_MAX_FEATURES
25 /// The maximum number of accumulators that may be put in an accumulator_set.
26 /// Defaults to BOOST_MPL_LIMIT_VECTOR_SIZE (which defaults to 20).
27 # define BOOST_ACCUMULATORS_MAX_FEATURES BOOST_MPL_LIMIT_VECTOR_SIZE
28 #endif
29
30 #if BOOST_ACCUMULATORS_MAX_FEATURES > BOOST_MPL_LIMIT_VECTOR_SIZE
31 # error BOOST_ACCUMULATORS_MAX_FEATURES cannot be larger than BOOST_MPL_LIMIT_VECTOR_SIZE
32 #endif
33
34 #ifndef BOOST_ACCUMULATORS_MAX_ARGS
35 /// The maximum number of arguments that may be specified to an accumulator_set's
36 /// accumulation function. Defaults to 15.
37 # define BOOST_ACCUMULATORS_MAX_ARGS 15
38 #endif
39
40 #if BOOST_WORKAROUND(__GNUC__, == 3) \
41 || BOOST_WORKAROUND(__EDG_VERSION__, BOOST_TESTED_AT(306))
42 # define BOOST_ACCUMULATORS_BROKEN_CONST_OVERLOADS
43 #endif
44
45 #ifdef BOOST_ACCUMULATORS_BROKEN_CONST_OVERLOADS
46 # include <boost/type_traits/is_const.hpp>
47 # define BOOST_ACCUMULATORS_PROTO_DISABLE_IF_IS_CONST(T)\
48 , typename boost::disable_if<boost::is_const<T> >::type * = 0
49 #else
50 # define BOOST_ACCUMULATORS_PROTO_DISABLE_IF_IS_CONST(T)
51 #endif
52
53 #define BOOST_ACCUMULATORS_GCC_VERSION \
54 (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
55
56 namespace boost { namespace accumulators
57 {
58
59 ///////////////////////////////////////////////////////////////////////////////
60 // Named parameters tags
61 //
62 namespace tag
63 {
64 struct sample;
65 struct weight;
66 struct accumulator;
67 struct weights;
68 }
69
70 ///////////////////////////////////////////////////////////////////////////////
71 // User-level features
72 //
73 namespace tag
74 {
75 template<typename ValueType, typename Tag>
76 struct value;
77
78 template<typename Tag>
79 struct value_tag;
80
81 template<typename Referent, typename Tag>
82 struct reference;
83
84 template<typename Tag>
85 struct reference_tag;
86
87 template<typename Type, typename Tag = void, typename AccumulatorSet = void>
88 struct external;
89
90 template<typename Feature>
91 struct droppable;
92 }
93
94 template<typename Accumulator>
95 struct droppable_accumulator_base;
96
97 template<typename Accumulator>
98 struct droppable_accumulator;
99
100 template<typename Accumulator>
101 struct with_cached_result;
102
103 template<typename Sample, typename Features, typename Weight = void>
104 struct accumulator_set;
105
106 template<typename Feature>
107 struct extractor;
108
109 template<typename Feature>
110 struct feature_of;
111
112 template<typename Feature>
113 struct as_feature;
114
115 template<typename Feature>
116 struct as_weighted_feature;
117
118 template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_ACCUMULATORS_MAX_FEATURES, typename Feature, mpl::na)>
119 struct depends_on;
120
121 template<BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_ACCUMULATORS_MAX_FEATURES, typename Feature, mpl::na)>
122 struct features;
123
124 template<typename Feature, typename AccumulatorSet>
125 typename mpl::apply<AccumulatorSet, Feature>::type const &
126 find_accumulator(AccumulatorSet const &acc);
127
128 template<typename Feature, typename AccumulatorSet>
129 typename mpl::apply<AccumulatorSet, Feature>::type::result_type
130 extract_result(AccumulatorSet const &acc);
131
132 namespace detail
133 {
134 struct _enabler
135 {
136 };
137 }
138
139 // ... other overloads generated by Boost.Preprocessor:
140
141 /// INTERNAL ONLY
142 ///
143 #define BOOST_ACCUMULATORS_EXTRACT_RESULT_FWD(z, n, _) \
144 template< \
145 typename Feature \
146 , typename AccumulatorSet \
147 BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename A) \
148 > \
149 typename mpl::apply<AccumulatorSet, Feature>::type::result_type \
150 extract_result( \
151 AccumulatorSet const &acc \
152 BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(z, n, A, const &a) \
153 , typename boost::enable_if< \
154 parameter::is_argument_pack<A0> \
155 , detail::_enabler \
156 >::type = detail::_enabler() \
157 ); \
158 template< \
159 typename Feature \
160 , typename AccumulatorSet \
161 BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, n, typename A) \
162 > \
163 typename mpl::apply<AccumulatorSet, Feature>::type::result_type \
164 extract_result( \
165 AccumulatorSet const &acc \
166 BOOST_PP_ENUM_TRAILING_BINARY_PARAMS_Z(z, n, A, const &a) \
167 , typename boost::disable_if< \
168 parameter::is_argument_pack<A0> \
169 , detail::_enabler \
170 >::type = detail::_enabler() \
171 );
172
173 /// INTERNAL ONLY
174 ///
175 BOOST_PP_REPEAT_FROM_TO(
176 1
177 , BOOST_PP_INC(BOOST_ACCUMULATORS_MAX_ARGS)
178 , BOOST_ACCUMULATORS_EXTRACT_RESULT_FWD
179 , _
180 )
181
182 #undef BOOST_ACCUMULATORS_EXTRACT_RESULT_FWD
183
184 #ifdef BOOST_ACCUMULATORS_DOXYGEN_INVOKED
185 template<typename Feature, typename AccumulatorSet, typename A1, typename A2 ...>
186 typename mpl::apply<AccumulatorSet, Feature>::type::result_type
187 extract_result(AccumulatorSet const &acc, A1 const &a1, A2 const &a2 ...);
188 #endif
189
190 namespace impl
191 {
192 using namespace numeric::operators;
193
194 template<typename Accumulator, typename Tag>
195 struct external_impl;
196 }
197
198 namespace detail
199 {
200 template<typename Accumulator>
201 struct feature_tag;
202
203 template<typename Feature, typename Sample, typename Weight>
204 struct to_accumulator;
205
206 struct accumulator_set_base;
207
208 template<typename T>
209 struct is_accumulator_set;
210
211 inline void ignore_variable(void const *) {}
212 }
213
214 }} // namespace boost::accumulators
215
216 #define BOOST_ACCUMULATORS_IGNORE_GLOBAL(X) \
217 namespace detail \
218 { \
219 struct BOOST_PP_CAT(ignore_, X) \
220 { \
221 void ignore() \
222 { \
223 boost::accumulators::detail::ignore_variable(&X); \
224 } \
225 }; \
226 } \
227 /**/
228
229 #include <boost/parameter/nested_keyword.hpp>
230
231 #endif // include guard
232